用于mono-android的Java反射

本文关键字:反射 Java mono-android 用于 | 更新日期: 2023-09-27 18:24:33

我面临WRAP_CONTENT无法在RecyclerView上工作的问题,所以我在谷歌上搜索了它并找到了解决方法。当我试图在c#中实现变通方法时,我被困在了这一行:

insetsDirtyField = RecyclerView.LayoutParams.class.getDeclaredField("mInsetsDirty");

在这里,我尝试移植原始的java代码,并移植了可在gist 中导航的代码

用于mono-android的Java反射

我被困在这条线上:

insetsDirtyField = RecyclerView.LayoutParams.class.getDeclaredField("mInsetsDirty");

CCD_ 2〃;关键字";在Java中相当于C#中的typeof()关键字,所以这是(kinda/sorta)类似于:

var insetsDirtyField = typeof(RecyclerView.LayoutParams).GetDeclaredField("mInsetsDirty");

但事实并非如此,因为typeof()返回一个System.Type,它对java.lang.Object实例一无所知。

相反,您应该使用Java.Lang.Class.FromType(Type)来获得Java.Lang.Class实例,然后它将允许您使用Java反射:

var klass = Java.Lang.Class.FromType (typeof (RecyclerView.LayoutParams));
var insetsDirtyField = klass.GetDeclaredField("mInsetsDirty");