2012-01-26 5 views
0

Так я реализовал ViewPager в Java, что для краткости, выглядит следующим образом:Использования JNIEnv для создания экземпляра/использование объектов

public class ViewpagerActivity extends ViewPager { 
private Context _context; 
public ViewpagerActivity(Context context) { 
    super(context); 
    _context = context; 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); 
    ARViewPagerAdapter adapter = new ARViewPagerAdapter(_context, LayoutInflater.from(_context)); 
    viewPager.setAdapter(adapter); 
    addView(viewPager); 
    // TODO Auto-generated constructor stub 
} 

В Monodroid я звоню это (от файла банки), используя нижеследующий:

 IntPtr _viewpagerview = Android.Runtime.JNIEnv.FindClass("net/salespad/viewpager/ViewpagerActivity"); 
     IntPtr _viewpagerconstructor = JNIEnv.GetMethodID(_viewpagerview, "<init>", "(Landroid/context/Context;)V"); 
     IntPtr _viewpager = JNIEnv.NewObject(_viewpagerview, _viewpagerconstructor); 

Мой вопрос - что мне делать с окончательным IntPtr? Как это сделать для представления?

ответ

2

Вы можете создать экземпляр Java.Lang.Object из IntPtr, как это:

var javaObject = new Java.Lang.Object(_viewpager, JniHandleOwnership.TransferLocalRef); 

Существует также JavaCast метод расширения, который может помочь вам бросить этот объект в другой класс:

var viewPager = javaObject.JavaCast<ViewPager>(); 

Однако, проблема, с которой вы столкнетесь, заключается в том, что класс ViewPager недоступен из C#, а это значит, что логика должна оставаться на Java в настоящее время.

+1

Я был обеспокоен тем, что мне, возможно, придется это сделать. Ну, я думаю, мне нужно будет портировать библиотеки совместимости, чтобы получить функциональность/возможность повторного использования, которые я хочу: -D. Благодарю. – Seabiscuit

Смежные вопросы