清除listview内容?

时间:2010-09-27 08:56:04

标签: android listview adapter

我对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;
    }

}

10 个答案:

答案 0 :(得分:189)

只需撰写

即可
listView.setAdapter(null);

答案 1 :(得分:53)

我猜你把List或数组传递给了适配器。如果保留此添加集合的实例,则可以执行

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

只有在使用集合实例化适配器并且它是同一个实例时才会起作用。

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

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

答案 2 :(得分:7)

这很简单。首先,您应该清除您的收藏,并清除清单后的代码:

 yourCollection.clear();
 setListAdapter(null);

答案 3 :(得分:3)

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

答案 4 :(得分:1)

简单就是我的作品:)

YourArrayList_Object.clear();

答案 5 :(得分:0)

从自定义适配器中移除您的商品,然后致电notifyDataSetChanged()

答案 6 :(得分:0)

listview中有重复条目的解决方案。 您必须在活动中声明onBackPress() - 方法,并记下下面给出的突出显示代码:

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    **

    attendence_webdata.clear(); list.setAdapter(null);
    --------------------------------------------------

    **
 }

答案 7 :(得分:0)

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

上即可

答案 8 :(得分:-3)

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

答案 9 :(得分:-3)

您需要同时调用ArrayAdapter和clear()中的notifyDataSetChanged()

以下是链接 click