删除项目后如何使用Android - notifyDataSetChanged()?

时间:2015-07-25 03:47:11

标签: java android

我搜索了很多类似的问题......所有人都说我必须使用类似这样的代码:

arrayAdapter.notifyDataSetChanged();

在此代码之后:bookmarks.remove(pos);

但是你可以看到...在BookMarkActivity类中不使用arrayAdapter

public class BookMarkActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.message);

        // Reading all contacts
        final ArrayList<BookMark> bookmarks = (ArrayList<BookMark>) db.getAllBookMarks();
        BuildingAdapter adapter = new BuildingAdapter(context);
        // ADDED
        final ListView lv = (ListView) findViewById(R.id.list_view);
        lv.setAdapter(new BookmarkAdapter(this, bookmarks));

        lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int pos, long id) {

                bookmarks.remove(pos);

                return true;
            }
        });

    }
}

我是android的新手......但我尝试用这个改变代码:

private ArrayAdapter<BookMark> arrayAdapter;
arrayAdapter = new BookmarkAdapter(this, bookmarks);

但没有成功!删除一个项目后,列表视图不会刷新!

2 个答案:

答案 0 :(得分:2)

ListView显示存储在ArrayList中的一些数据。

当元素删除或添加到ArrayList中时,您必须告诉列表数据源已更改以显示新数据。

所以,这就是notifyDatasetChanged()的用武之地。它告诉ListView数据已被修改,所以请反映更改后的数据。

final BookmarkAdapter adapter = new BookmarkAdapter(this, bookmarks);
lv.setAdapter(adapter);

并在删除元素之后使用。

adapter.notifyDataSetChanged();
希望它有所帮助。

答案 1 :(得分:0)

只需在按钮/imageView 点击监听器上添加两行即可。

delete.setOnClickListener {
                list.removeAt(pos)
                notifyItemRemoved(pos)
            }