2016-03-03 91 views
1

我正在從使用光標適配器填充的listview中刪除項目。即使我使用了notifyDataSetChanged(),但它並沒有立即刷新。我可以看到之前的活動再次來到這個頁面後的區別。CursorAdapter ListView刷新

您的回答是更多的讚賞。

這裏是我的適配器代碼:

@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; 
} 

UPDATE:

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

顯示你的代碼,你在呼喚notifyDatasetChanged() – barq

+0

更新代碼。請 –

回答

2

使用必須使用光標刷新ListView。

你「刷新[你]光標」通過再次運行你的代碼來獲取Cursor,使用您用來創建原始Cursor(在後臺線程,請)的代碼。你可以致電changeCursor()swapCursor()CursorAdapter上刷新ListView

+0

非常感謝你 –

+0

@ParamaSudha很樂意幫助你。 – 2016-03-03 08:10:03

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()方法與新的數據