2016-10-24 14 views
9

ListviewsetMultiChoiceModeListenerを使用して、複数のアイテムを選択して削除するアクションモードを起動しています。 ListViewスクロールで、サーバーからさらにデータをロードし、アダプターに通知します。 adapterが通知された後、アクションモード(呼び出された場合)が破棄されて再作成され、タイトルと選択されたarraylistが空になります(下の図を参照)。リストビュー項目の選択はそのままです。もっと多くのデータを読み込んでも破壊されないGmailアプリケーションでは、CABを永続的にしたいと思っています。以下はリストビューの後でAndroid CABが破棄される

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

するためのコードですべてのヘルプは非常に、事前に感謝を理解されるであろう。あなたは/以下の例に示すように、アダプタの変更通知リフレッシュした後、選択した状態とショーを保持するために選択した項目IDを保存する必要が

+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が消えて(時には2回)、それが見えるようになることです。デバッグ中に、リストのリフレッシュ中に 'onCreateActionMode'が再び呼び出されることが容易に分かります。 Gmailを使用している場合は、CABがデータを読み込み中に破棄されずに再作成されないことがわかります。 –

関連する問題