我已经通过ActionBarSherlock实现了一个ActionMode(感谢Jake Wharton获取ABS!)。
无论如何,我打电话给
mActionMode.invalidate();
每次我点击一个ListView项目,它也会增加/减少checkedCounter。
然后在public boolean onPrepareActionMode(ActionMode mode, android.view.Menu menu)
中,我必须根据checkedCounter的值设置ActionMode内容。
onPrepareActionMode的代码如下:
public boolean onPrepareActionMode(ActionMode mode, android.view.Menu menu) { Log.d("ASDASD", "INSIDE ONPREPARE!"); if (mActionMode == null) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.contextualmultiple, menu); return false; } if (checkedCount == 0) { mActionMode.finish(); } else if (checkedCount == 1 && mActionMode != null) { mActionMode.setTitle(checkedCount + " Message Selected"); MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.contextualmultiple, menu); return true; } else if (checkedCount > 1) { mActionMode.setTitle(checkedCount + " Messages Selected"); MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.contextual, menu); return true; } return true; }
现在,问题在于,当checkCount为1时,它会使菜单膨胀,其中包含3个项目。 但是,当计数器增加到2时,它会使另一个菜单膨胀1个项目,但是会增加先前膨胀的菜单,而不会先取消内容。 即;现在ActionMode在Contextual ActionBar中有2个当前+ 1的当前内容!
如何在调用mActionMode.invalidate()
时更改我的代码以从ActionMode中删除以前存在的菜单项?
P.S。 :onCreateActionMode()函数为空,因为onPrepareActionMode()执行所有操作,包括当mActionMode为null并且具有要首次充气的菜单时。
答案 0 :(得分:6)
哈哈!我找到了一个荒谬简单的解决方案来解决这个荒谬的问题!
对于任何可能遇到此问题的人,只需在所有inflate()语句之前添加menu.clear();
语句,就是这样!