App的ActionBar中的后退按钮

时间:2017-09-03 14:51:02

标签: android android-activity android-actionbar

通常从一个活动切换到另一个活动汉堡包图标被替换为后退箭头。我想控制那个箭头的功能。我在这里看到了很多内容,但大多数都与硬件的后退按钮有关。我该如何控制?

我正在尝试片段的功能。另外,我的导航抽屉附有汉堡包图标。

我试过了这个 -

Tuple2

但不像我希望的那样工作。

我希望我的后退按钮可以将片段更改为上一个片段。

2 个答案:

答案 0 :(得分:1)

我曾经遇到过同样的问题。就像你一样,检查Android.R.id.home是否被点击这样的事情并不奏效。 但我用它来解决它:

将导航侦听器设置为工具栏:

toolbar.setToolbarNavigationClickListener(v -> onBackPressed());

如果它应该在片段内:

  1. 在活动中创建公共方法。
  2. 在片段的onAttach(或更高版本)中,将getActivity()强制转换为您之前定义的活动和调用方法。
  3. 示例:

    // YourActivity
    public void setHomeListener(OnLickListener listener){
        toolbar.setToolbarNavigationClickListener(listener);
    }
    
    //Fragment's onCreate
    ((YourActivity)getActivity()).setHomeListener(v -> onBackPressed());
    
    //Fragment's onDestroy
     ((YourActivity)getActivity()).setHomeListener(null);
    

    当然,请将我们设置为启用以显示后退箭头。

    修改

    如果你不使用labmdas,你应该使用:

    (YourActivity)getActivity()).setHomeListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            YourFragment.this.onBackPressed();
        }
    });
    

答案 1 :(得分:0)

ActionBar的后退按钮是一个menuItem,因此您需要覆盖onOptionsItemSelected,如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            //Your back button logic here
            break;
    }
    return true;
}

也不要忘记在设置工具栏

后添加getSupportActionBar().setDisplayHomeAsUpEnabled(true);