Tan*_*nya 35 android actionbarsherlock android-actionbar
我ActionMode用来选择网格中的项目.问题是我无法识别是否单击了完成按钮.我唯一能做的就是知道ActionMode已经完成了.但是按下Back也完成了ActionMode.期望的行为是接受选择完成点击,并退出ActionMode在回机.
我尝试使用,ActionMode.setCustomView()但它不会影响完成按钮.在Activity.onBackPressed()启动ActionMode时,不叫.
我发现的一个解决方案是使用ActionBarSherlock并手动获取Done按钮:
View closeButton = findViewById(R.id.abs__action_mode_close_button);
Run Code Online (Sandbox Code Playgroud)
但它仅适用于Android 2.x-3.x,因为使用4.xa本机操作栏.
Jak*_*ton 36
请不要这样做,因为它是特定于实现的,非常不标准.
您可以在onDestroyActionMode解除操作模式时使用回调.
Ale*_*dev 21
这是解决方案:
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();
}
});
Run Code Online (Sandbox Code Playgroud)
Eur*_*nes 10
这是我的实现,这是一个正确的黑客,但它的工作原理,当单击ActionMode DONE时,我无法真正找到一种替代方法.我发现你不能更优雅地捕捉这个事件真的很奇怪.
任何建议,使这个稍微不那么难看将非常感谢...
在我的活动..
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.
}
Run Code Online (Sandbox Code Playgroud)
如果您在Activity中使用Fragments,那么这些代码中的一些可能需要在Fragment中,以及Activity中的其他位.
@JakeWharton(和其他ActionBarSherlock用户)如果你在旅行中看到这个.我有兴趣知道上面是否与ABS兼容,因为我还没有将ABS与我当前的项目集成.
| 归档时间: |
|
| 查看次数: |
13135 次 |
| 最近记录: |