99

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

我希望它发生在操作栏上。我怎样才能做到这一点?

这是我的代码:

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

无论后按是否有效,我都使用了这个 toast,但实际的实现发生了变化,比如回到以前的活动。但这不适用于操作栏顶部的按钮(除了活动的标题)。

请任何人都可以指定我的问题。

4

10 回答 10

217

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

@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;
}
于 2013-01-21T11:38:46.137 回答
50

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }
于 2015-01-06T22:02:35.770 回答
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();
}

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

于 2015-08-13T16:14:25.827 回答
9

抱歉,我的回答迟了,但对于其他到达此页面且有相同问题的人,我已经尝试了上述方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

但这未能抓住“返回”按钮的按下。

最终,我在https://stackoverflow.com/a/37185334/3697478上找到了一种对我有用的方法,即在我使用“AppCompatActivity”支持库中的操作栏时覆盖“onSupportNavigateUp()”。(对于较新的操作栏/工具栏库,有一个等效的“onNavigateUp()”。)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

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

于 2018-06-11T10:24:41.083 回答
7
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }
于 2014-02-07T07:49:01.963 回答
4

我通过简单的两个步骤实现了这一点,

第 1 步:转到 AndroidManifest.xml 并在标签中添加参数 - android:parentActivityName=".home.HomeActivity"

例子 :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

第 2 步:在 ActivityDetail 中为上一页/活动添加您的操作

例子 :

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }
于 2017-10-24T06:58:22.743 回答
3

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

<activity
        android:name=".ParentActivity" />

(2)覆盖子activity内部的onSupportNavigateUp方法

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}
于 2020-03-22T18:16:09.317 回答
2

如果您想通过按下 ActionBar 主页按钮返回到Activity 的上一个实例,而不重新创建它,您可以覆盖 getParentActivityIntent 方法以使用后堆栈中的一个:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

编辑:您也可以通过将父活动的启动模式 设置为singleTop
来实现相同的结果 因此,在清单中设置为父活动。 或者,您可以将标志 FLAG_ACTIVITY_CLEAR_TOP 与 UP 意图一起使用。 参考:提供向上导航

android:launchMode="singleTop"

于 2016-03-15T08:55:32.843 回答
0
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}
于 2017-10-19T12:03:47.720 回答
0

有几种方法可以在 bar 中设置返回按钮:

1)方法.setDisplayHomeAsUpEnabled(true);会做到这一点,然后你可以简单地覆盖android.R.id.home

2) 添加<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />Android Manifest,但在这种情况下,您不能android.R.id.home在 OnOptionsMenuSelected 中覆盖。

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

于 2018-02-02T13:18:34.940 回答