在CustomAdapter中调用BaseAdapter的notifyDataSetChanged()而不刷新ListView

时间:2016-02-07 12:08:27

标签: java android listview android-adapter baseadapter

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;

        }

    }
}

1 个答案:

答案 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的方法。