<Drawable> 在安卓中使用ArrayAdapter设置ArrayList时出现问题<Drawable>



在我的应用程序中,我想在Listview中显示应用程序图标。我通过使用其包名来获取应用程序图标,该包名存储在arrayList<String>变量arrayPackage中。因此,它应该是这样的:

ArrayList<Drawable> arrayList=new ArrayList<Drawable>(); Drawable d=getPackageManager().getApplicationIcon(file.toString()); arrayList.add(d);

现在我用ListView适配器设置arrayList变量,如下所示:

ArrayAdapter<Drawable> adapter=new ArrayAdapter<Drawable>(this,R.layout.iconss,arrayList); list.setAdapter(adapter); adapter.setNotifyOnChange(true);

其中R.layout.iconss是我的布局,其中包含ImageView。但它不起作用,它在Logcat中出现错误,如下所示:

07-24 11:53:04.640 27041-27041/com.example.adarsh.test E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.adarsh.test, PID: 27041 java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) at android.widget.AbsListView.obtainView(AbsListView.java:2347) at android.widget.ListView.measureHeightOfChildren(ListView.java:1270) at android.widget.ListView.onMeasure(ListView.java:1182) at android.view.View.measure(View.java:17565) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) at android.view.View.measure(View.java:17565) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) Caused by: java.lang.ClassCastException: android.support.v7.widget.AppCompatImageView cannot be cast to android.widget.TextView at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:382) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)  at android.widget.AbsListView.obtainView(AbsListView.java:2347)  at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)  at android.widget.ListView.onMeasure(ListView.java:1182)  at android.view.View.measure(View.java:17565)  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)  at android.view.View.measure(View.java:17565)  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)  at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)  at android.view.View.measure(View.java:17565)  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)  at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)  at android.view.View.measure(View.java:17565)  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)  at android.view.View.measure(View.java:17565)  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)  at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)  at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)  at android.view.View.measure(View.java:17565)  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)  at android.view.View.measure(View.java:17565)  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045)  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196)  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409)  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)  at android.view.Choreographer.doCallbacks(Choreographer.java:580)  at android.view.Choreographer.doFrame(Choreographer.java:550)  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5343)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

那么问题出在哪里呢。。请帮帮我。

如果要直接使用ArrayAdapter,则必须在布局中提供TextView。并将您的TextView id传递到其中,或者将该TextView的id设置为android:id="@android:id/text1"

但是,如果你想使用一个没有任何TextView的自定义布局,那么你必须实现一个扩展ArrayAdapter的自定义适配器类。

您可以通过此链接了解如何实现自定义适配器。

最新更新