CursorAdapter ListView刷新

时间:2016-03-03 07:01:47

标签: android android-cursoradapter

我正在从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;
    }

2 个答案:

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