在我的应用程序中,如果您单击按钮,那么我想删除所有listview项目。 在这里,我使用基本适配器将项目添加到列表视图。
如何动态删除listview项目。
答案 0 :(得分:34)
再次致电setListAdapter()
。这次是一个空的ArrayList。
答案 1 :(得分:24)
ListView
根据Adapter
中的基础数据运作。为了清除ListView
,你需要做两件事:
notifyDataSetChanged
例如,请参阅下面SampleAdapter
扩展BaseAdapter
public class SampleAdapter extends BaseAdapter {
ArrayList<String> data;
public SampleAdapter() {
this.data = new ArrayList<String>();
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return data.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// your View
return null;
}
}
这里有ArrayList<String> data
作为适配器的数据。虽然您可能不需要使用ArrayList,但您的代码中会有类似的内容来表示ListView中的数据
接下来,您提供了一种清除此数据的方法,此方法的实现是清除基础数据结构
public void clearData() {
// clear the data
data.clear();
}
如果您使用Collection的任何子类,他们将使用您可以使用的clear()方法。
使用此方法后,您需要在clearData
上致电notifyDataSetChanged
和onClick
,因此onClick
的代码如下所示:
// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();
// refresh the View
sampleAdapter.notifyDataSetChanged();
答案 2 :(得分:10)
如果您使用了List对象并传递给适配器,则可以从List对象中删除该值,然后使用适配器对象调用notifyDataSetChanged()。
例如
List<String> list = new ArrayList<String>();
ArrayAdapter adapter;
adapter = new ArrayAdapter<String>(DeleteManyTask.this,
android.R.layout.simple_list_item_1,
(String[])list.toArray(new String[0]));
listview = (ListView) findViewById(R.id.list);
listview.setAdapter(adapter);
listview.setAdapter(listAdapter);
删除这样做
list.remove(index); //or
list.clear();
adpater.notifyDataSetChanged();
或没有列表对象从列表中删除项目。
adapter.clear();
adpater.notifyDataSetChanged();
答案 3 :(得分:8)
您只能使用
lv.setAdapter(null);
答案 4 :(得分:4)
我使用了这个陈述,它对我有用:
setListAdapter(null)
这个调用默认构造函数,在类扩展BaseAdapter中什么都不做。
答案 5 :(得分:3)
我只是清理arraylist,尝试values.clear();
values = new ArrayList<String>();
values.clear();
ArrayAdapter <String> adapter;
adapter = new ArrayAdapter<String>(this, R.layout.list,android.R.id.text1, values);
lista.setAdapter(adapter);
答案 6 :(得分:2)
您可以这样做:
listView.setAdapter(null);
答案 7 :(得分:0)
从adapter
移除数据并致电adapter.notifyDataSetChanged();
答案 8 :(得分:0)
使用符合您要求的以下任何一种选项
listview.removeViews(1,listview.getChildCount());
或
listview.removeViewInLayout(your view);
答案 9 :(得分:0)
尝试以下解决方案后的另一种方法。当您需要清除时,只需将列表初始化为新的清除新列表。
List<ModelData> dataLists = new ArrayList<>();
RaporAdapter adapter = new RaporAdapter(AyrintiliRapor.this, dataLists);
listview.setAdapter(adapter);
或者根据需要设置Gone / Invisible的可见性
img_pdf.setVisibility(View.INVISIBLE);
答案 10 :(得分:0)
对我来说这样做:
private ListView yourListViewName;
private List<YourClassName> yourListName;
...
yourListName = new ArrayList<>();
yourAdapterName = new yourAdapterName(this, R.layout.your_layout_name, yourListName);
...
if (yourAdapterName.getCount() > 0) {
yourAdapterName.clear();
yourAdapterName.notifyDataSetChanged();
}
yourAdapterName.add(new YourClassName(yourParameter1, yourParameter2, ...));
yourListViewName.setAdapter(yourAdapterName);