2016-10-24 15 views
9

Listview üzerinde setMultiChoiceModeListener kullanıyorum, silinecek birden çok öğeyi seçmek için Eylem Modu'nu çağırın. ListView üzerinde kaydırma Ben sunucudan daha fazla veri yüklemek ve adaptörü bildirmek. adapter bildirildikten sonra, Eylem Modu (çağrılırsa) imha edilir ve yeniden oluşturulur; bu da başlığı ve arraylistin boş olduğunu gösterir (aşağıdaki resmi görebilirsiniz). Liste görünümü öğesi seçimi kalırken. CAB'nin, Gmail uygulamasında gördüğümüz gibi, daha fazla veri yüklemeyi imha etmediği gibi kalıcı olmasını istiyorum.Android CAB, liste görünümünden sonra yok saymayacak şekilde değişti

enter image description here

Aşağıda Herhangi bir yardım son derece takdir edilecektir Eylem Modu

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
      listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
       @Override 
       public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 

         Item mItem = adapter.items.get(position); 
         if (mItem.isSection()) { 
         } else { 
          mode.setTitle(listView.getCheckedItemCount() + " Selected"); 
          EntryItem mEntryItem = (EntryItem) mItem; 
          orderid = mEntryItem.orderId; 
          if (checked) { 
           selectedIdList.add(orderid); 
          } else { 
           selectedIdList.remove(orderid); 
          } 
          // Toggle the state of item after every click on it 
          adapter.toggleSelection(position); 
        } 
       } 

       @Override 
       public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
        if (item.getItemId() == R.id.delete){ 

         if (selectedIdList.size() > 0) { 
          deleteItems(selectedIdList); 
         } 
         mode.finish(); 
         return true; 
        } 
        return false; 
       } 


       @Override 
       public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
        mode.getMenuInflater().inflate(R.menu.menu_main, menu); 
        actionMode = mode; 
        return true; 
       } 


       @Override 
       public void onDestroyActionMode(ActionMode mode) { 
        actionMode = null; 
        if (selectedIdList.size() > 0) { 
         selectedIdList.clear(); 
         adapter.mSelectedItemsIds.clear(); 
        } 
       } 


       @Override 
       public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
        return false; 
       } 
      }); 

için kod, şimdiden teşekkürler olduğunu. Aşağıdaki örneklerde gösterildiği gibi

+0

Yeniden oluşturmayı engelleyebilecek itemclick öğesinden mode.finish() öğesini kaldırmayı deneyin. –

+0

lütfen buraya giriş ekleyin, böylece –

+0

@parikdhakan 'mode.finish()' 'onActionItemClicked',' actionbar' içindeki delete simgesine dokunulur, aksi takdirde oraya çağrılmaz. –

cevap

0

Sen/yeniledikten sonra seçilen olarak devlet ve gösteriyi korumak için seçilen öğeler kimliği kaydetmek adaptör değişiklikleri bildirmek gerekir:

1) https://androidperspective.wordpress.com/2013/04/17/contextual-action-bar-with-listview/

(O seçimi ve tasarrufu gösterir seçili öğe, durumu kaydetmek için dizide ids).

2) http://theopentutorials.com/examples/android/listview/android-contextual-action-bar-for-listview-item-deletion-using-actionbarsherlock/

(Bu sadece) sadece küçük bir değişiklik olacağını Sherlock eylem çubuğunu kullanarak silinmek üzere istediğiniz tam örnek gösterir.

Size yardımcı olup olmadığına sevindim.

+0

Seçim, öğelerin seçili olduğundan bahsetmiş olduğumdan sorun değil, bu yüzden onları alabilirim. Sorun liste yenilenirken CAB kaybolur (bazen iki kez) ve sonra görünür hale gelir. Hata ayıklama işlemi sırasında, liste yenilemeleri sırasında 'onCreateActionMode' tekrar çağrılır. Gmail kullanıyorsanız, daha fazla veri yüklenirken CAB’in yok etmediğini ve yeniden oluşturulmadığını görebilirsiniz. –

İlgili konular