在数组适配器构造函数上抛出Android NoSuchMethodError

|| 我正在尝试扩展通用ArrayAdapter以便自定义ListView,并在命中
TpAdapter
(扩展的Adapter)构造函数时引发NoSuchMethodError 这是已释放的ArrayAdapter
TpAdapter
    private class TpAdapter : ArrayAdapter<MobileTalkingPoint>
    {
        private MobileTalkingPoint[] items;
        private Context outer_context;

        public TpAdapter(Context context, int textViewResourceId, MobileTalkingPoint[] items)
            : base(context, textViewResourceId, items)
        {
            this.items = items;
            this.outer_context = context;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View v = convertView;

            if (v == null)
            {
                LayoutInflater vi = (LayoutInflater)outer_context.GetSystemService(Context.LayoutInflaterService);
                v = vi.Inflate(Resource.Layout.ItemTalkingPoint, null);
            }
            MobileTalkingPoint tp = items[position];
            if (tp != null)
            {
                TextView tpDate = v.FindViewById<TextView>(Resource.Id.tpDate);
                TextView tpTitle = v.FindViewById<TextView>(Resource.Id.tpTitle);
                TextView tpType = v.FindViewById<TextView>(Resource.Id.tpType);
                TextView tpBody = v.FindViewById<TextView>(Resource.Id.tpBody);

                tpDate.Text = String.Format(\"{0:MM/dd/yy}\", tp.TPDate);
                tpTitle.Text = tp.Title;
                tpType.Text = tp.Type;
                tpBody.Text = tp.Descr;
            }

            return v;
        }
    }
我在活动中将它们实例化如下:
        MobileTalkingPoint[] weaknesses = talkingPoints;

        TpAdapter adapStrength = new TpAdapter(this, Resource.Layout.ItemTalkingPoint, strengths);
并且异常的堆栈跟踪如下
I/ActivityManager( 1283): Starting: Intent { cmp=MapDroid.MapDroid/mapdroid.TabbedView (has extras) } from pid 22409
I/ActivityManager( 1283): Displayed MapDroid.MapDroid/mapdroid.TabbedView: +573ms
D/dalvikvm(22409): GetMethodID: method not found: Lmapdroid/TabTalkingPoints_TpAdapter;.<init>:(Landroid/content/Context;I[Ljava/lang/Object;)V
I/MonoDroid(22409): UNHANDLED EXCEPTION: Java.Lang.NoSuchMethodError: Exception of type \'Java.Lang.NoSuchMethodError\' was thrown.
I/MonoDroid(22409): at Android.Runtime.JNIEnv.GetMethodID (intptr,string,string) <0x0007c>
I/MonoDroid(22409): at Android.Widget.ArrayAdapter`1<MonoMap.wsMobile.MobileTalkingPoint>..ctor (Android.Content.Context,int,MonoMap.wsMobile.MobileTalkingPoint[]) <0x0027b>
I/MonoDroid(22409): at MapDroid.TabTalkingPoints/TpAdapter..ctor (Android.Content.Context,int,MonoMap.wsMobile.MobileTalkingPoint[]) <0x0002b>
I/MonoDroid(22409): at MapDroid.TabTalkingPoints.ShowList () <0x00077>
I/MonoDroid(22409): at MapDroid.TabTalkingPoints.OnCreate (Android.OS.Bundle) <0x001df>
I/MonoDroid(22409): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x00057>
I/MonoDroid(22409): at (wrapper dynamic-method) object.b1cd4072-05f5-4443-8835-b4102b462c1e (intptr,intptr,intptr) <0x00033>
I/MonoDroid(22409):
I/MonoDroid(22409):   --- End of managed exception stack trace ---
I/MonoDroid(22409): java.lang.NoSuchMethodError: <init>
I/MonoDroid(22409):     at mapdroid.TabTalkingPoints.n_onCreate(Native Method)
I/MonoDroid(22409):     at mapdroid.TabTalkingPoints.onCreate(TabTalkingPoints.java:25)
I/MonoDroid(22409):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
I/MonoDroid(22409):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
I/MonoDroid(22409):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
I/MonoDroid(22409):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
I/MonoDroid(22409):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
I/MonoDroid(22409):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
I/MonoDroid(22409):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
I/MonoDroid(22409):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
I/MonoDroid(22409):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:455)
I/MonoDroid(22409):     at android.view.View.performClick(View.java:2501)
I/MonoDroid(22409):     at android.view.View$PerformClick.run(View.java:9107)
I/MonoDroid(22409):     at android.os.Handler.handleCallback(Handler.java:587)
I/MonoDroid(22409):     at android.os.Handler.dispatchMessage(Handler.java:92)
I/MonoDroid(22409):     at android.os.Looper.loop(Looper.java:123)
I/MonoDroid(22409):     at android.app.ActivityThread.main(ActivityThread.java:3835)
I/MonoDroid(22409):     at java.lang.reflect.Method.invokeNative(Native Method)
I/MonoDroid(22409):     at java.lang.reflect.Method.invoke(Method.java:507)
I/MonoDroid(22409):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
I/MonoDroid(22409):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
I/MonoDroid(22409):     at dalvik.system.NativeStart.main(Native Method)
E/mono    (22409):
E/mono    (22409): Unhandled Exception: Java.Lang.NoSuchMethodError: Exception of type \'Java.Lang.NoSuchMethodError\' was thrown.
E/mono    (22409):   at Android.Runtime.JNIEnv.GetMethodID (IntPtr kls, System.String name, System.String signature) [0x00000] in <filename unknown>:0
E/mono    (22409):   at Android.Widget.ArrayAdapter`1[MonoMap.wsMobile.MobileTalkingPoint]..ctor (Android.Content.Context context, Int32 textViewResourceId, MonoMap.wsMobile.MobileTalkingPoint[] objects) [0x00000] in <filename unknown>:0
E/mono    (22409):   at MapDroid.TabTalkingPoints+TpAdapter..ctor (Android.Content.Context context, Int32 textViewResourceId, MonoMap.wsMobile.MobileTalkingPoint[] items) [0x00000] in <filename unknown>:0
E/mono    (22409):   at MapDroid.TabTalkingPoints.ShowList () [0x00000] in <filename unknown>:0
E/mono    (22409):   at MapDroid.TabTalkingPoints.OnCreate (Android.OS.Bundle bundle) [0x00000] in <filename unknown>:0
E/mono    (22409):   at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (IntPtr jnienv, IntPtr native__this, IntPtr native_savedInstanceState) [0x00000] in <filename unknown>:0
E/mono    (22409):   at (wrapper dynamic-method)
I/ActivityManager( 1283): Process MapDroid.MapDroid (pid 22409) has died.
注意我正在将Mono for Android与Visual Studio 2010一起使用     
已邀请:
        我不确定这是否是Mono For Android中的错误(虽然看起来可能是这样),但是如果您修改适配器以接受IList而不是数组,问题就消失了:
private class TpAdapter : ArrayAdapter<MobileTalkingPoint>
{
    public TpAdapter(Context context, int textViewResourceId, IList<MobileTalkingPoint> items)
        : base(context, textViewResourceId, items)
    {
    }
}
您仍然可以使用数组来调用它,因此不需要修改:
MobileTalkingPoint[] points = { };
TpAdapter adapStrength = new TpAdapter(this, Resource.Layout.ItemTalkingPoint, points);
    

要回复问题请先登录注册