【问题标题】:How to remove listview all items如何删除列表查看所有项目
【发布时间】:2011-11-16 01:27:10
【问题描述】:

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

如何动态删除列表视图项。

【问题讨论】:

  • 动态传递getcount,清除传递零作为getcount
  • listview.setAdapter(null);
  • 谢谢 Abhi,这真的很有帮助。覆盖 getCount 方法 ....

标签: android listview adapter


【解决方案1】:

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

【讨论】:

  • 这里如果你点击按钮,旧数据列表视图项目将被删除,之后新项目将被添加到列表视图中。这有可能吗?
  • 是的,您可以根据需要使用新数据调用 setListAdaptor()。
  • 使用新的 Adapter 对象调用 setListAdapter() 会很昂贵。只需使用 clear() 删除适配器中的所有项目,然后使用 add()/addAll() 将新数据添加到现有 Adapter 对象并调用 notifyDatasetChanged()。
【解决方案2】:

ListView 基于Adapter 中的基础数据进行操作。为了清除ListView,您需要做两件事:

  1. 从适配器清除您设置的数据。
  2. 调用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&lt;String&gt; data 作为适配器的数据。虽然您可能不需要使用 ArrayList,但您的代码中会有类似的东西来表示 ListView 中的数据

接下来你提供一个清除这个数据的方法,这个方法的实现就是清除底层数据结构


public void clearData() {
    // clear the data
    data.clear();
}

如果您使用Collection 的任何子类,它们将具有您可以如上所述使用的clear() 方法。

一旦你有了这个方法,你想在你的onClick上调用clearDatanotifyDataSetChanged,因此onClick的代码看起来像:


// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();

// refresh the View
sampleAdapter.notifyDataSetChanged();

【讨论】:

    【解决方案3】:

    如果您使用 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();
    

    【讨论】:

    • 我正在使用基本适配器。所以我没有 clear() 方法。怎么去掉?
    【解决方案4】:

    你只能使用

     lv.setAdapter(null);
    

    【讨论】:

      【解决方案5】:

      你可以这样做:

      listView.setAdapter(null);
      

      【讨论】:

        【解决方案6】:

        我使用了这个语句,它对我有用:

           setListAdapter(null)
        

        这个调用了一个默认构造函数,它在类扩展 BaseAdapter 中什么都不做。

        【讨论】:

        • 这会破坏 android 2.1
        【解决方案7】:

        我只是清理 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);
        

        【讨论】:

          【解决方案8】:

          adapter 中删除数据并调用adapter.notifyDataSetChanged();

          【讨论】:

          • 如何从adpater中删除数据?
          • 在声明适配器时,您会以某种形式传递值...从那里删除值....
          • 这就是问题所在。如何从适配器中删除项目。
          【解决方案9】:

          使用适合您要求的任何一种波纹管选项

          listview.removeViews(1,listview.getChildCount());
          

          listview.removeViewInLayout(your view);
          

          【讨论】:

            【解决方案10】:

            尝试以下解决方案后的另一种方法。当您需要清除时,只需将您的列表初始化为新的清除新列表。

            List<ModelData> dataLists = new ArrayList<>();
                            RaporAdapter adapter = new RaporAdapter(AyrintiliRapor.this, dataLists);
                            listview.setAdapter(adapter);
            

            或者根据需要将可见性设置为消失/不可见

            img_pdf.setVisibility(View.INVISIBLE);
            

            【讨论】:

              【解决方案11】:

              对我来说是这样工作的:

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

              【讨论】:

                【解决方案12】:

                //很简单

                适配器.clear();

                【讨论】:

                  猜你喜欢
                  • 2014-09-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-10-09
                  • 2019-09-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-20
                  相关资源
                  最近更新 更多