Android ActionMode动态替换Action Items

Dak*_*ksh 3 android actionbarsherlock android-actionbar

我已经通过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;
        }
Run Code Online (Sandbox Code Playgroud)

现在,问题在于,当checkCount为1时,它会使菜单膨胀,其中包含3个项目.但是,当计数器增加到2时,它会使另一个菜单膨胀1个项目,但是会增加先前膨胀的菜单,而不会先取消内容.IE浏览器; 现在,ActionMode在Contextual ActionBar中有2个当前+ 1的当前值!

如何在调用时更改我的代码以从ActionMode中删除以前存在的菜单项mActionMode.invalidate()?

PS:onCreateActionMode()函数为空,因为onPrepareActionMode()执行所有操作,包括当mActionMode为空并且具有第一次要充气的菜单时.

Dak*_*ksh 7

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

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