我已经通过actionbarsherlock实现了一个actionmode(感谢jake沃顿的abs!).
不管怎样,我打电话给mActionMode.invalidate();
每次单击ListView项时,它也会递增/递减一个CheckedCounter。
然后在public booleanonPrepareActionMode(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在上下文actionbar中有2个previous+1个current!
调用
mActionMode.invalidate()
时,如何更改代码以从actionmode中删除以前存在的菜单项?注意:onCreateActionMode()函数是空的,因为onPrepareActionMode()会执行所有操作,包括当MactionMode为空并且有一个菜单要首次充气时。
最佳答案
哈哈!我找到了一个可笑的简单的解决办法!
对于其他任何可能遇到此问题的人,只需在所有inflate()语句之前添加一个menu.clear();
语句,就这样!