应用程序 ActionBar 中的后退按钮

Back Button in ActionBar of App

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

我正在尝试片段情况下的功能。我还有带有汉堡包图标的导航抽屉。

我试过了-

if(id == android.R.id.home){
        getSupportFragmentManager().beginTransaction().replace(R.id.main_container, new AmbulanceMap()).commit();
        getSupportActionBar().setTitle("Book A Ride");
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    }

但没有像我希望的那样工作。

我想要我的后退按钮将片段更改为上一个片段。

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

我曾经遇到过同样的问题。就像您一样,检查 Android.R.id.home 是否被点击之类的操作不起作用。 但我用它解决了它:

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

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

如果它应该在片段内:

  1. 在 activity 中创建一个 public 方法。
  2. 在片段的 onAttach(或更高版本)中将 getActivity() 转换为您的 activity 并调用您之前定义的方法。

示例:

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