我用ActionMode
选择在网格中的项目。 问题是,我不能承认完全完成按钮是否被点击。 唯一我能是知道ActionMode
完成。 但按返回结束ActionMode
了。 期望的行为是接受后,单击选择,并退出ActionMode
上返回按。
我试图用ActionMode.setCustomView()
但它不会影响完成按钮。 该Activity.onBackPressed()
开始ActionMode时,不叫。
在一个解决方案,我发现是使用ActionBarSherlock和手动获取完成按钮:
View closeButton = findViewById(R.id.abs__action_mode_close_button);
但是它适用于Android 2.X只,3.x中,因为使用4.xa本土行动起来吧。
请不要做,因为它是实现特定的和极其不规范。
您可以使用onDestroyActionMode
回调时的操作模式被解雇。
这里是解决方案:
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();
}
});
下面是我的实现,这是一个正确的技巧,但它的作品,我真的不能找到被点击DONE的ActionMode时做一些具体的事情的替代品。 我觉得很奇怪,你不能更优雅捕获这个事件。
在作出任何建议,这略少丑将不胜感激......
在我的活动..
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.
}
如果您使用的片段与您的活动,然后一些这方面的代码可能需要在分片,并在活动中的其他位。
@JakeWharton(和其他ActionBarSherlock用户),如果你见到这对您的旅行。 我很想知道,如果上面是用ABS兼容,因为我还没有ABS与我当前的项目整合。