2016-03-03 6 views
1

Я удаляю элемент из списка, который заполняется с помощью адаптера курсора. Даже я использовал notifyDataSetChanged(). Но он не обновлялся немедленно. Я видел разницу после этой страницы снова из предыдущей активности.CursorAdapter ListView refresh

Ваш ответ более ценится.

Вот мой код адаптера:

@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

Изменено code.Please –

ответ

2

Использование Необходимо обновить Listview с помощью курсора.

Вы «обновить [ваш] Курсор», запустив код еще раз, чтобы получить Cursor, используя код, который вы использовали для создания оригинала Cursor (на фоне потока, пожалуйста). Вы обновите ListView, позвонив по телефону changeCursor() или swapCursor() по телефону CursorAdapter.

+0

Большое вам спасибо –

+0

@ParamaSudha рада помочь вам. –

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() с новыми данными

Смежные вопросы