Android ActionMode动态替换Action Items

时间:2012-10-14 16:46:53

标签: android android-actionbar actionbarsherlock

我已经通过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并且具有要首次充气的菜单时。

1 个答案:

答案 0 :(得分:6)

哈哈!我找到了一个荒谬简单的解决方案来解决这个荒谬的问题!

对于任何可能遇到此问题的人,只需在所有inflate()语句之前添加menu.clear();语句,就是这样!