使用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?我该如何看待这一点?
您可以从IntPtr实例化Java.Lang.Object,如下所示:
var javaObject = new Java.Lang.Object(_viewpager, JniHandleOwnership.TransferLocalRef);
还有JavaCast扩展方法可以帮助您将该对象转换为另一个类:
var viewPager = javaObject.JavaCast<ViewPager>();
然而,您将在这里遇到的问题是,ViewPager类不能从C#访问,这意味着逻辑现在需要留在Java中。