从ListView中删除项目并刷新它

时间:2012-11-22 16:45:18

标签: android listview view

我有一个简单的问题。 我想删除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)

2 个答案:

答案 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()