我ArrayList<MyObject> data
使用ListView
填充了CustomAdapter
。
我在View.OnClickListener
类中实现了CustomAdapter
,单击按钮会删除特定行。使用自定义适配器内的data
从数据库和data.remove(i)
对象中删除行后,我调用notifyDataSetChanged()
。
问题是它没有刷新ListView
。
我正在使用带片段的标签式活动。因此,当转到某个远程标签并返回此标签时,它会刷新ListView
,并且已删除的项目不再显示。
为什么ListView
在我调用notifyDataSetChanged()
时不会立即刷新,而是在我移动到另一个片段并返回时更改?
我的CustomAdapter
课程如下:
public class CustomAdapter extends BaseAdapter implements View.OnClickListener {
private LayoutInflater mInflater;
Context context;
private ArrayList<MyObject> data;
public CustomAdapter(Context context, ArrayList<MyObject> data) {
mInflater = LayoutInflater.from(context);
this.data = data;
this.context = context;
}
.....
.....
.....
.....
.....
@Override
public void onClick(View v) {
DataBaseHelper db = new DataBaseHelper(context);
int id = data.get((Integer) v.getTag()).id;
//use getTag() to get the position, set position in tag before adding listener.
switch (v.getId()){
case R.id.txtName:
Toast.makeText(context, "Show Details" + v.getTag(), Toast.LENGTH_SHORT).show();
break;
case R.id.btnRemove:
db.removePaper(id); // works fine
data.remove(v.getTag()); // works fine
notifyDataSetChanged(); // PROBLEM HERE: Does not refresh listview
break;
case R.id.btnFavorite:
Toast.makeText(context, "Favorite" + v.getTag(), Toast.LENGTH_SHORT).show();
break;
}
}
}
答案 0 :(得分:2)
前段时间我遇到了类似的问题,我修改了<div class="colSub1"></div>
<div class="colSub2"></div>
<div class="colSub3"></div>
<div class="colSub1"></div>
<div class="colSub2"></div>
<div class="colSub3"></div>
<div class="colSub2"></div>
而不是ArrayAdapter<MyObject>
并覆盖了一些方法:
BaseAdapter
然后调用这些方法,而不是直接调用List的方法。