-2

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

2 回答 2

1

这取决于您使用的适配器。

如果您使用的是 ArrayAdapter,只需将其删除,然后通知 ListView。根据 listView 的设置方式,您可能需要做一些更激烈的事情,正如在这个问题中所解释的那样。

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();

如果您使用的是其他类型的适配器,则可能需要创建一个已修改的新适配器,并将其设置为上述列表视图。

于 2012-11-22T16:47:45.900 回答
1

您可能正在使用数组适配器将项目设置为列表视图。如果您正在这样做,请使用arrayadapterObject.remove(the item you need to remove)并调用 arrayadapterObject.notifyDAtaSetChanged()以刷新与您的 arrayadapter 相关的项目

例如,您需要从列表视图中删除项目 0 并刷新列表视图然后只需arrayadapterObject.remove(0)在此调用旁边使用和arrayadapterObject.notifyDAtaSetChanged()

于 2012-11-22T16:53:43.293 回答