如何删除listview所有项目

时间:2011-09-13 10:37:32

标签: android listview adapter

在我的应用程序中,如果您单击按钮,那么我想删除所有listview项目。 在这里,我使用基本适配器将项目添加到列表视图。

如何动态删除listview项目。

11 个答案:

答案 0 :(得分:34)

再次致电setListAdapter()。这次是一个空的ArrayList。

答案 1 :(得分:24)

ListView根据Adapter中的基础数据运作。为了清除ListView,你需要做两件事:

  1. 清除您从适配器设置的数据。
  2. 通过调用notifyDataSetChanged
  3. 刷新视图

    例如,请参阅下面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上致电notifyDataSetChangedonClick,因此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);