Uzun tıklatmayla CAB'yi gösteren bir liste var. 1'den fazla öğe seçilirse, menü öğelerinden birini gizlemek istiyorum.Öğeleri birden çok öğe seçildiğinde Dinamik olarak İçeriği Eylem Çubuğunu (CAB) gizleyin
onItemCheckedStateChanged()
'da seçilen öğelerin sayısını takip ediyorum. Ancak öğeyi bu işlevden kaldırmak için menüye erişemiyorum. Neyi denediğime dair bir fikir edinmek için aşağıdaki koddaki yorumları görün. Bazı temel çekirdek anlama eksik hissediyorum ... benim onCreate()
işlevinden aşağıdaki kod denir.
private void setupActionBarContext() {
ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
private int selCount = 0;
ArrayList<Long> idList = new ArrayList<Long>();
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if (checked) {
selCount++;
idList.add(id);
} else {
selCount--;
idList.remove(id);
}
mode.setTitle(selCount + " selected");
// I WOULD LIKE TO HIDE ITEM ON MENU IF 'selCount' IS > 1
// For example something like this...
// if (selCount > 1) {
// MenuItem item = menu.findItem(R.id.edit_item);
// item.setVisible(false);
// } else {
// MenuItem item = menu.findItem(R.id.edit_item);
// item.setVisible(false);
// }
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete_item:
for(Long i: idList){
mDbHelper.deleteItem(i);
}
mode.finish();
return true;
case R.id.edit_item:
Toast.makeText(getBaseContext(), "Edit Item", Toast.LENGTH_SHORT).show();
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
selCount = 0;
idList.clear();
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
});
Ve menü öğesi
... adneal yorumuna da önerildiği gibi<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/edit_item"
android:title="@string/edit_item"
android:showAsAction="ifRoom"
android:orderInCategory="1"/>
<item android:id="@+id/delete_item"
android:title="@string/delete_item"
android:icon="@drawable/ic_action_delete"
android:showAsAction="ifRoom"
android:orderInCategory="2"/>
</menu>
[ActionMode.invalidate] (http://developer.android.com/reference/android/view/ActionMode.html#invalidate()) – adneal
Teşekkürler, bu benim aradığım buydu. –