Używam setMultiChoiceModeListener
na Listview
, aby wywołać tryb działania w celu wybrania wielu elementów do usunięcia. Na przewijanie ListView
mogę załadować więcej danych z serwera i powiadomić adapter. Po powiadomieniu adapter
, tryb akcji (jeśli został wywołany) jest niszczony i odtwarzany, co powoduje, że tytuł i wybrana lista tablic pustych jest pusta (możesz zobaczyć poniższy obraz). Podczas gdy wybór pozycji listy pozostaje. Chcę, aby CAB była trwała tak, jak to widzimy w aplikacji Gmail, gdzie nie niszczy się podczas ładowania większej ilości danych.Android CAB niszczenie po wyświetleniu listy notifydatasetchanged
Poniżej znajduje się kod dla trybu działania
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;
}
});
Każda pomoc będzie bardzo mile widziane, z góry dzięki.
spróbuj usunąć tryb.finish() z itemclick, który może nie zostać odtworzony. –
proszę dodać dziennik tutaj, aby go przejrzeć, –
@parikdhakan 'mode.finish()' w 'onActionItemClicked' jest wywoływane po dotknięciu ikony usuwania w' actionbar', w przeciwnym razie nie zostanie tam wywołane. –