如何在android中覆盖动作栏后退按钮?

G K*_*G K 89 java android

我想在操作栏中自定义活动后退按钮,而不是在硬键后退按钮中.我已经覆盖了这个onBackPressed()方法.它适用于我的模拟器后退按钮,但不适用于操作栏后退按钮.

我希望它与动作栏一起发生.我怎样才能做到这一点?

这是我的代码:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用了这个toast,无论后退是否有效,但实际的实现变化就像回到之前的活动一样.但是这不适用于操作栏顶部的按钮(除了活动的标题).

请任何人指出我的问题.

ibr*_*maz 200

我想你想要覆盖主页按钮的点击操作.您可以在活动中覆盖此功能.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • add super.onBackPressed(); 它 (4认同)
  • Noah Ibrahim,其实左上角有一个后退按钮,就像浏览器中的后退按钮一样。当我点击那个按钮时,我想回到之前的活动。不像你上面发布的代码。 (2认同)
  • 在我将 `return true;` 更改为 `return super.onOptionsItemSelected(item)` 后,这对我有用。然后您可以在用户单击操作栏后退按钮时发生一些事情,但仍保留按钮的相同功能。 (2认同)

ruX*_*ruX 40

如果您希望ActionBar后退按钮的行为与硬件后退按钮相同:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }
Run Code Online (Sandbox Code Playgroud)

  • 案例“android.R.id.home”不触发 (2认同)
  • @Trancer如果你在Fragment中使用它,你还应该在fragment的onCreate方法中调用`setHasOptionsMenu(true)` (2认同)

ssi*_*nik 10

要记住两件事情,用户可以按下后退按钮或按动作栏主页按钮.
因此,如果您想将他重定向到同一目的地,那么您可以这样做.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}
Run Code Online (Sandbox Code Playgroud)

这将使用户按下任意键或操作栏按钮.

  • 我已经找到了解决方案.但谢谢你的回复 (2认同)

Kru*_*hah 7

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }
Run Code Online (Sandbox Code Playgroud)

  • 您可以将其添加为评论.它与接受的答案大致相同. (2认同)

小智 6

(1)为您的子活动添加父活动(AndroidManifest.xml)

<activity
        android:name=".ParentActivity" />
Run Code Online (Sandbox Code Playgroud)

(2) 重写子Activity内部的onSupportNavigateUp方法

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ett 5

对不起,我的回答很晚,但是对于其他到达此页面并遇到相同问题的人,我尝试了以下方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}
Run Code Online (Sandbox Code Playgroud)

但这未能捕捉到“返回”按钮的按下。

最终,我在/sf/answers/2602973411/上找到了一种对我有用的方法,该方法将覆盖“ onSupportNavigateUp()”,因为我正在使用“ AppCompatActivity”支持库中的操作栏。(较新的操作栏/工具栏库有一个等效的“ onNavigateUp()”。)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}
Run Code Online (Sandbox Code Playgroud)

我从清单文件中删除了“ android:parentActivityName =“。MainActivity”部分。