【问题标题】:Clear listview content?清除列表视图内容?
【发布时间】:2011-04-17 16:02:38
【问题描述】:

ListView 有点问题。我如何清除 ListView 内容,知道它有一个自定义适配器?

edit - 自定义适配器类扩展 BaseAdapter,如下所示:

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater = null;

    public MyAdapter(Activity a, String[] str) {
        activity = a;
        data = str;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public static class ViewHolder {
        public TextView text;
    }

    @Override
    public int getCount() {
        return data.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        View v = view;
        ViewHolder holder;
        if (v == null) {
            v = inflater.inflate(R.layout.rowa, null);
            holder = new ViewHolder();
            holder.text= v.findViewById(R.id.dexter);
            v.setTag(holder);
        } else {
            holder = v.getTag();
        }

        holder.text.setText(data[position]);

        return v;
    }

}

【问题讨论】:

    标签: android listview adapter


    【解决方案1】:

    简单写

    listView.setAdapter(null);
    

    【讨论】:

    • 更好地使用 Adapter.clear() 和 Adapter.notifyDataSetChanged()
    • 如果有人还在使用 android 1.6,设置 null 或 0 长度适配器时会崩溃。
    • 这很好用。谁会使用 android 1.6 =P 谢谢 mike
    • beshkenadze - 你让我全部退出 Adapter.clear()... 太糟糕了,不存在! ://
    • 如果您从ListFragment 扩展,最好使用setListAdapter(null);
    【解决方案2】:

    我猜你向适配器传递了一个列表或数组。如果你保留这个添加集合的实例,你可以做一个

    collection.clear();
    listview.getAdapter().notifyDataSetChanged();
    

    只有当您使用 collection 实例化适配器并且它是同一个实例时,这才会起作用。

    此外,根据您扩展的适配器,您可能无法执行此操作。 SimpleAdapter用于静态数据,创建后无法更新。

    PS。并非所有适配器都有 clear() 方法。 ArrayAdapter 可以,但 ListAdapter 或 SimpleAdapter 不可以

    【讨论】:

    • 我正在扩展 BaseAdapter,我认为它没有 clear() 方法。
    • 您需要它作为 BaseAdapter 吗?如果您可以切换到扩展 ArrayAdapter,您将获得 clear() 方法。看起来在 BaseAdapter 中你需要使用这个 registerDataSetObserver(DataSetObserver 观察者),我猜如果 DataSet 改变它会自动更新。但是,ArrayAdapter 可能会让事情变得更容易。祝你好运!
    • 感谢您的帮助,但您能否给我一个关于如何扩展 ArrayAdapter 的示例代码。谢谢。
    • check stackoverflow.com/questions/2265661/… 和你已经拥有的真的很相似。
    • 感谢分享,但我的问题似乎与适配器无关,因为即使我使用 ArrayAdapter 的 clear() 并重新加载活动,除了新内容。我真的有麻烦了。 (抱歉英语不好,我希望你明白了)。
    【解决方案3】:

    这很简单。首先你应该清除你的收藏,然后像下面的代码一样清除列表:

     yourCollection.clear();
     setListAdapter(null);
    

    【讨论】:

      【解决方案4】:

      从 Android 版本 M 和 N 开始,以下对我有用,并且是正确的方法。清空 ListView 或将 Adapter 设置为 null 不是正确的方法,会导致空指针问题、无效的 ListView 和/或应用程序崩溃。

      简单地做:

          mList.clear();
          mAdapter.notifyDataSetChanged();
      

      即首先您完全清除列表,然后让适配器知道此更改。 Android 将使用空列表正确更新 UI。就我而言,我的列表是一个 ArrayList。

      如果您从不同的线程执行此操作,请在 UI 线程上运行此代码:

          runOnUiThread(mRunnable);
      

      mRunnable 在哪里:

          Runnable mRunnable = new Runnable() {
              public void run() {
                  mList.clear();
                  mAdapter.notifyDataSetChanged();
              }
          };;
      

      【讨论】:

        【解决方案5】:

        把它的工作简单我:)

        YourArrayList_Object.clear();
        

        【讨论】:

        • 你能详细说明一下吗?
        • ArrayList callhistory_details_list;使用这个 arraylist 对象(即 callhistory_details_list)。 callhistory_details_list.clear();希望它会帮助你。如有任何疑问,请告诉我
        【解决方案6】:

        从您的自定义适配器中删除您的项目并致电notifyDataSetChanged()。

        【讨论】:

        • 使用 notifyDataSetChanged() 对 listview 竞争没有影响。
        【解决方案7】:

        列表视图中的重复条目有一个解决方案。 您必须在您的活动中声明onBackPress()-method 并写下下面给出的突出显示代码:

        @Override
        public void onBackPressed() {
            // TODO Auto-generated method stub
            super.onBackPressed();
            **
        
            attendence_webdata.clear(); list.setAdapter(null);
            --------------------------------------------------
        
            **
         }
        

        【讨论】:

        • 大声笑,当然不是,你在说什么重复条目? onBackPressed 与清除适配器有什么关系?你知道你在说什么吗?
        • 对不起我的英语,但是当我点击按钮并打开屏幕以查看列表视图时,每次它带有相同的条目,所以在后按时使用 clear 方法
        【解决方案8】:

        只需将代码 ListView.Items.Clear(); 放在您的方法上

        【讨论】:

        • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
        【解决方案9】:

        从您的自定义适配器调用 clear() 方法。

        【讨论】:

        • clean() 不适用于 BaseAdapter。
        • 也可以将listview适配器设置为null。
        【解决方案10】:

        您需要同时从 ArrayAdapter 调用 clear() 和 notifyDataSetChanged()。

        以下是链接 click

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-04
          • 1970-01-01
          • 2022-11-25
          • 1970-01-01
          • 2012-04-14
          • 1970-01-01
          相关资源
          最近更新 更多