我正在从listview中删除一个项目,该项目使用Cursor Adapter填充。即使我使用了notifyDataSetChanged()。但它并没有立即刷新。我可以看到从之前的活动再次来到这个页面后的差异。
您的回答更受赞赏。
这是我的适配器代码:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.remove:
dbUtil.open();
String delItem = viewHolder.cartProduct.getText().toString();
Cursor Cartcursor = dbUtil.getCartID(delItem);
if (Cartcursor != null && Cartcursor.moveToFirst()) {
Cartcursor.moveToFirst();
String strCartProductID = Cartcursor.getString(Cartcursor.getColumnIndex(DbHelper.CART_PDT_ID));
dbUtil.deleteCart(strCartProductID, delItem);
Toast.makeText(contextNew, "Cart Item " + "RowId" + strCartProductID + " Product Id" + delItem, Toast.LENGTH_SHORT).show();
Toast.makeText(contextNew, "Deleted Successfully", Toast.LENGTH_SHORT).show();
}
break;
}
更新
MyFragment.class
dbUtil.open();
cartcursor = dbUtil.getCartItem();
txtCartCount.setText("" + cartcursor.getCount());
if (cartcursor != null && cartcursor.moveToFirst()) {
cartcursor.moveToFirst();
cartAdapter = new CartCursorAdapter(context, cartcursor, MYFRAGMENT, true);
cartList.setAdapter(cartAdapter);
cartList.setTextFilterEnabled(true);
cartAdapter.notifyDataSetChanged();
}
完美结果:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.remove:
dbUtil.open();
String delItem = viewHolder.cartProduct.getText().toString();
Cursor Cartcursor = dbUtil.getCartID(delItem);
if (Cartcursor != null && Cartcursor.moveToFirst()) {
Cartcursor.moveToFirst();
String strCartProductID = Cartcursor.getString(Cartcursor.getColumnIndex(DbHelper.CART_PDT_ID));
dbUtil.deleteCart(strCartProductID, delItem);
Cartcursor = dbUtil.getCartItem();
swapCursor(Cartcursor);
notifyDataSetChanged();
}
break;
}
答案 0 :(得分:2)
使用必须使用光标刷新Listview。
通过再次运行代码获取Cursor
,使用您用于创建原始Cursor
的代码(请在后台线程中),“刷新[your] Cursor”。您可以通过调用ListView
上的changeCursor()
或swapCursor()
来刷新CursorAdapter
。
答案 1 :(得分:1)
如果您使用的是LoaderManager.LoaderCallbacks,请尝试以下方法:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(...);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
关键是使用新数据
调用swapCursor()
方法