使用JNIEnv实例化/使用对象

本文关键字:对象 JNIEnv 实例化 使用 | 更新日期: 2023-09-27 18:21:27

所以我用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?我该如何看待这一点?

使用JNIEnv实例化/使用对象

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

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

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

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

然而,您将在这里遇到的问题是,ViewPager类不能从C#访问,这意味着逻辑现在需要留在Java中。