android开发分享如何识别在ActionMode中是否单击完成button

我使用ActionMode来select网格中的项目。 问题是,我无法识别是否完全按下了完成button。 我唯一可以知道的是ActionMode已经完成了。 但是按下Back也完成了ActionMode 。 期望的行为是在完成单击时接受select,并在Back按下退出ActionMode

我试图使用ActionMode.setCustomView()但它不影响完成button。 当ActionMode启动时, Activity.onBackPressed()不会被调用。

我发现的一个解决scheme是使用ActionBarSherlock并手动获取完成button:

 View closeButton = findViewById(R.id.abs__action_mode_close_button); 

但是它仅适用于Android 2.x-3.x,因为在4.xa本机操作栏上使用。

    请不要这样做,因为它是特定于实现的,而且非常不规范。

    您可以使用onDestroyActionModecallback来解除操作模式。

    这是解决scheme:

     ActionMode mMode = MyActivityClass.this.startActionMode(some implementation); int doneButtonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android"); View doneButton = MyActivityClass.this.findViewById(doneButtonId); doneButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // do whatever you want // in android source code it's calling mMode.finish(); } }); 

    这里是我的实现,这是一个适当的黑客攻击,但它的工作原理,我真的找不到一个替代scheme,当点击ActionMode DONE时做特定的事情。 我觉得很奇怪,你不能更优雅地捕捉这个事件。

    任何build议,使这个稍微不丑陋的将不胜感激…

    在我的活动..

     boolean mActionModeIsActive = false; boolean mBackWasPressedInActionMode = false; @Override public boolean dispatchKeyEvent(KeyEvent event) { mBackWasPressedInActionMode = mActionModeIsActive && event.getKeyCode() == KeyEvent.KEYCODE_BACK; return super.dispatchKeyEvent(event); } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mActionModeIsActive = true; return true; } @Override public void onDestroyActionMode(ActionMode mode) { mActionModeIsActive = false; if (!mBackWasPressedInActionMode) onActionModeDoneClick(); mBackWasPressedInActionMode = false; } public void onActionModeDoneClick(); { // Do something here. } 

    如果您的活动使用Fragments,那么这些代码中的一部分可能需要放在Fragment中,而Activity中的其他位则可能需要。

    @JakeWharton(和其他ActionBarSherlock用户),如果你在旅行中看到这个。 我有兴趣知道上述是否与ABS兼容,因为我还没有将ABS与我目前的项目整合。

    以上就是android开发分享如何识别在ActionMode中是否单击完成button相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/512594.html

      (0)
      上一篇 2020年11月27日
      下一篇 2020年11月27日

      精彩推荐