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()方法