CursorAdapter ListView 刷新
CursorAdapter ListView refresh
我正在从使用游标适配器填充的列表视图中删除一个项目。即使我使用了 notifyDataSetChanged()。但它没有刷新 immediately.I 再次来到此页面后可以看到与之前 activity 的不同。
非常感谢您的回答。
这是我的适配器代码:
@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;
}
Use Have to Refresh Listview using Cursor.
你"refresh [your] Cursor"通过运行你的代码再次得到Cursor
,使用你用来创建原始Cursor
的代码(请在后台线程).您通过在 CursorAdapter
上调用 changeCursor()
或 swapCursor()
来刷新 ListView
。
如果您使用的是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()
方法
我正在从使用游标适配器填充的列表视图中删除一个项目。即使我使用了 notifyDataSetChanged()。但它没有刷新 immediately.I 再次来到此页面后可以看到与之前 activity 的不同。
非常感谢您的回答。
这是我的适配器代码:
@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;
}
Use Have to Refresh Listview using Cursor.
你"refresh [your] Cursor"通过运行你的代码再次得到Cursor
,使用你用来创建原始Cursor
的代码(请在后台线程).您通过在 CursorAdapter
上调用 changeCursor()
或 swapCursor()
来刷新 ListView
。
如果您使用的是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()
方法