Java 如何覆盖android中的操作栏后退按钮?

Java 如何覆盖android中的操作栏后退按钮?,java,android,Java,Android,我想自定义操作栏中的“活动后退”按钮,而不是硬键后退按钮。我已经重写了onBackPressed()方法。它适用于我的emulator后退按钮,但不适用于操作栏后退按钮 我希望它发生在动作栏上。我该怎么做 这是我的密码: @Override public void onBackPressed() { Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();

我想自定义操作栏中的“活动后退”按钮,而不是硬键后退按钮。我已经重写了
onBackPressed()
方法。它适用于我的emulator后退按钮,但不适用于操作栏后退按钮

我希望它发生在动作栏上。我该怎么做

这是我的密码:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}
无论back pressed是否有效,我都使用了这个toast,但实际的实现更改喜欢移回以前的活动。但这不适用于操作栏顶部的按钮(活动标题除外)


请任何人告诉我这个问题。

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

@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;
}

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

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

要记住两件事,用户可以按后退按钮或按actionbar主页按钮。
所以,如果你想将他重定向到同一个目的地,那么你可以这样做

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

这将使用户按任意键或操作栏按钮进入目的地。

如果要通过按操作栏主按钮返回到活动的上一个实例,而不重新创建它,则可以覆盖getParentActivityIntent方法以使用后堆栈中的方法:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
编辑:
您也可以通过
将父活动的启动模式设置为单顶模式。

因此,在清单中将android:launchMode=“singleTop”设置为父活动。
或者您可以使用flag\u ACTIVITY\u CLEAR\u TOP来实现向上的意图。

参考资料:

我已经做到了这一点,只需使用两个步骤

步骤1:转到AndroidManifest.xml,并在中添加标记-android:parentActivityName=“.home.HomeActivity”中的参数

例如:

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }

有几种方法可以在工具栏中设置后退按钮:

1) 方法
.setDisplayHomeAsUpEnabled(true)
将执行此操作,然后您可以简单地覆盖
android.R.id.home

2) 在Android清单中添加
,但在这种情况下,您不能在OnOptions菜单中覆盖
Android.R.id.home


。。对于那些想知道为什么它对他们不起作用的人…

很抱歉,我的答案太晚了,但是对于其他带着同样问题来到本页面的人,我已经尝试了上面的方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}
但这并没有抓住“后退”按钮的按下

最终,我找到了一个适合我的方法,在我使用“AppCompatActivity”支持库中的actionbar时重写“onSupportNavigateUp()”。(对于较新的actionbar/工具栏库,有一个等效的“onNavigateUp()”)

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

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


Noah Ibrahim,实际上在浏览器的左上角有一个后退按钮,类似于浏览器中的后退按钮。当我单击该按钮时,我想返回到上一个活动。与上面发布的代码不同。添加super.onBackPressed();这在我将
返回true;
更改为
返回super.onoptionItemSelected(item)后对我有效
。然后,当用户单击actionbar后退按钮时,您可以使某些事情发生,但仍然保留按钮的相同功能。通过这种技术,后退箭头按钮的响应很晚。这意味着我必须等待一秒钟才能触发事件。同时,按下按钮时,此按钮上的选择器也没有显示效果k对我来说。当我调试时,我发现home button的id和button clicked的id不同。你可以添加它作为注释。它与接受的答案大致相同。case
android.R.id.home
没有firing@Trancer,已经快1.5年了。我现在不做安卓。我现在帮不了你。对不起。那有什么问题lution?case
android.R.id.home
没有firing@Trancer如果您在Fragment中使用它,那么还应该在Fragment的onCreate方法中调用
sethaspoptionsMenu(true)
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}
@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}
<activity
        android:name=".ParentActivity" />
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}