我搜索了很多类似的问题......所有人都说我必须使用类似这样的代码:
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);
但没有成功!删除一个项目后,列表视图不会刷新!
答案 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)
}