2016-10-24 25 views
9

我在Listview上使用setMultiChoiceModeListener來調用操作模式以選擇要刪除的多個項目。在ListView滾動我從服務器加載更多數據並通知適配器。在adapter已收到通知後,操作模式(如果調用)被銷燬並重新創建,這會使標題和選定的數組列表爲空(您可以看到下圖)。列表視圖項目選擇仍然存在。我希望CAB像我們在Gmail應用程序中看到的那樣持久,在加載更多數據時不會破壞它。Android CAB在列表視圖後銷燬notifydatasetchanged

enter image description here

下面是操作模式

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

代碼任何幫助將不勝感激,謝謝提前。

+0

嘗試從itemclick中移除可能阻止重新創建的mode.finish()。 –

+0

請在這裏添加日誌,以便可以查看 –

+0

@parikdhakan''onActionItemClicked'中的mode.finish()'在'actionbar'中的刪除圖標點擊被調用,否則它將不會在那裏調用。 –

回答

0

您需要保存選定的項目編號,以便保持狀態,並顯示爲選擇刷新後/通知適配器更改,如見下例:

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

(它顯示了選擇和保存在數組中選擇項目ID以保存狀態)。

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

(它顯示你想要刪除只是用福爾摩斯行動起來吧那也只能是變化不大),完整的例子。

很高興知道它是否對您有所幫助。

+0

選擇不是問題,因爲我已經提到,項目仍然被選中,所以我可以得到它們。問題是當列表刷新CAB消失(有時兩次),然後它變得可見。在調試的時候可以很容易地看到在列表刷新期間再次調用onCreateActionMode。如果您使用的是Gmail,則可以看到CAB在加載更多數據時不會銷燬和重新創建。 –

相關問題