有条件地抓住片段上的后退按钮

时间:2017-02-20 14:03:33

标签: android fragment back-button

我有一个包含多个视图的片段。我想要抓住它上面的后退按钮,所以如果选中了特定的视图,只需省略按下按钮,如果没有选择该特定视图,就像任何后退按钮一样按下它的工作。我用下面的代码来捕捉后退按钮:

View v = inflater.inflate(R.layout.home_page, paramViewGroup, false);
v.setFocusableInTouchMode(true);
    v.requestFocus();
    v.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                if (fab.isSelected()) {
                    hideMenu();
                    fab.setSelected(!fab.isSelected());
                }
                // else
                //     How back button do its habitual job?
                //
                return true;
            } else {
                return false;
            }
        }
    });

如何更改后退按钮执行惯常工作的代码?

使用当前代码,后退按钮永远不会终止主页中的应用程序。

2 个答案:

答案 0 :(得分:0)

您应该覆盖活动范围中的onBackPressed()方法,并使用onOptionsItemSelected方法调用它。

@Override
public void onBackPressed()
{
    super.onBackPressed();
    // Do your things.
}

public void method()
{
    onBackPressed();
}

如果您想在onBackPressed方法中添加一些复杂的逻辑,只需创建另一个带参数的逻辑。

public void myOnBackPressed(int param1, String param2)
{
    // Do your complex logic.
    onBackPressed();
}

public void method()
{
    myOnBackPressed(myInt, myString);
}

答案 1 :(得分:0)

在您的代码中,您设置了return true。这意味着你处理后退按钮,你不想发出后退按钮。 您可以在onBackPressed()方法中调用onKey()以在外部发出后退按钮。或者您可以在片段onBackPressed()中处理后退按钮。