使用JNIEnv实例化/使用对象

时间:2012-01-26 16:59:54

标签: c# xamarin.android

所以我在Java中实现了一个ViewPager,为简洁起见,它看起来像这样:

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中,我使用以下方法调用此文件(在jar文件中):

        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?如何将其投射到视图中?

1 个答案:

答案 0 :(得分:2)

您可以从IntPtr中实例化Java.Lang.Object,如下所示:

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

还有JavaCast扩展方法可以帮助您将该对象转换为另一个类:

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

但是,您将遇到的问题是无法从C#访问ViewPager类,这意味着逻辑现在需要保留在Java中。