我有一个简单的问题。 我想删除ListView中的项目而不重新启动活动。这可能吗?
我尝试过:
adapter.remove(adapter.getItem(currentPosition)); // line 188
但发生以下错误:
11-22 17:59:36.520: E/AndroidRuntime(8124): FATAL EXCEPTION: main
11-22 17:59:36.520: E/AndroidRuntime(8124): java.lang.UnsupportedOperationException
11-22 17:59:36.520: E/AndroidRuntime(8124): at java.util.AbstractList.remove(AbstractList.java:645)
11-22 17:59:36.520: E/AndroidRuntime(8124): at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:77)
11-22 17:59:36.520: E/AndroidRuntime(8124): at java.util.AbstractCollection.remove(AbstractCollection.java:230)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.widget.ArrayAdapter.remove(ArrayAdapter.java:248)
11-22 17:59:36.520: E/AndroidRuntime(8124): at host.activity.ACT_MessaggiRicevuti$3.onClick(ACT_MessaggiRicevuti.java:188)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.view.View.performClick(View.java:3110)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.view.View$PerformClick.run(View.java:11934)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.os.Handler.handleCallback(Handler.java:587)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.os.Handler.dispatchMessage(Handler.java:92)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.os.Looper.loop(Looper.java:132)
11-22 17:59:36.520: E/AndroidRuntime(8124): at android.app.ActivityThread.main(ActivityThread.java:4123)
11-22 17:59:36.520: E/AndroidRuntime(8124): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 17:59:36.520: E/AndroidRuntime(8124): at java.lang.reflect.Method.invoke(Method.java:491)
11-22 17:59:36.520: E/AndroidRuntime(8124): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
11-22 17:59:36.520: E/AndroidRuntime(8124): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
11-22 17:59:36.520: E/AndroidRuntime(8124): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
这取决于您使用的适配器。
如果您使用的是ArrayAdapter,只需删除它,然后通知ListView。根据listView的设置方式,您可能需要做一些更激烈的事情,如this question所述。
ListView listview; //Somehow you get a handle for it
ArrayList <Integer> list=new ArrayList<Integer>([0 6 1 2 3]);
ArrayAdapter <Integer> mAdapter=new ArrayAdapter<Integer>(this,list);
listview.setListAdapter(mAdapter);
mAdapter.remove(2); //Removes the number 2
madapter.notifyDataSetChanged();
如果您正在使用其他类型的适配器,则可能需要创建一个已修改的新适配器,并将其设置为listView。
答案 1 :(得分:1)
您可能正在使用arrayadapter将项目设置为listview。
如果您这样做,请使用arrayadapterObject.remove(the item you need to remove)
并致电
arrayadapterObject.notifyDAtaSetChanged()
刷新与您的arrayadapter
例如,您需要从列表视图中删除项目0并刷新列表视图
然后只需使用arrayadapterObject.remove(0)
并在此调用旁边arrayadapterObject.notifyDAtaSetChanged()