如何识别完成按钮是否被点击ActionMode(How to recognize whether t

2019-06-26 12:51发布

我用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本土行动起来吧。

Answer 1:

请不要做,因为它是实现特定的和极其不规范。

您可以使用onDestroyActionMode回调时的操作模式被解雇。



Answer 2:

这里是解决方案:

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();
    }
});


Answer 3:

下面是我的实现,这是一个正确的技巧,但它的作品,我真的不能找到被点击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与我当前的项目整合。



文章来源: How to recognize whether the Done button is clicked in ActionMode