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