如何识别在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本机操作栏上使用。
请不要这样做,因为它是特定于实现的,而且非常不规范。
您可以使用onDestroyActionMode
callback来解除操作模式。
这是解决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与我目前的项目整合。