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

时间:2013-01-21 11:34:30

标签: java android

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

我希望它与动作栏一起发生。我怎么能这样做?

这是我的代码:

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

我已经使用过这个toast,无论后退是否正常工作,但实际的实现更改为回到之前的活动。但这不适用于操作栏顶部的按钮(除了活动标题)。

请任何人指出我的问题。

10 个答案:

答案 0 :(得分:188)

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

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

答案 1 :(得分:37)

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

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

答案 2 :(得分:8)

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

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

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

答案 3 :(得分:7)

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

答案 4 :(得分:3)

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

步骤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);
 }

答案 5 :(得分:2)

如果您想通过按ActionBar主页按钮而不重新创建来返回上一个活动实例,则可以覆盖getParentActivityIntent方法以使用后筹码:

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

编辑:
你也可以通过
实现相同的结果 将父活动的 launchMode 设置为 singleTop。
因此,请将android:launchMode="singleTop"设置为清单中的父级活动 或者您可以将标志FLAG_ACTIVITY_CLEAR_TOP与UP意图一起使用 参考:Providing Up Navigation

答案 6 :(得分:2)

很抱歉我的回答是迟到的,但是对于其他任何人来到这个页面都有同样的问题,我已经尝试了以上内容:

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

但这未能赶上&#34; Back&#34;按钮按下。

最终我在https://stackoverflow.com/a/37185334/3697478找到了一个对我有用的方法,即覆盖&#34; onSupportNavigateUp()&#34;因为我正在使用&#34; AppCompatActivity&#34;支持库。 (对于较新的操作栏/工具栏库,有一个等效的&#34; onNavigateUp()&#34;。

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

我删除了&#34; android:parentActivityName =&#34; .MainActivity&#34;清单文件中的部分。

答案 7 :(得分:2)

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

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

(2)覆盖子活动中的onSupportNavigateUp方法

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}

答案 8 :(得分: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();
}

答案 9 :(得分:0)

如何在栏中设置后退按钮有几种方法:

1)方法.setDisplayHomeAsUpEnabled(true);将执行此操作,然后您只需覆盖android.R.id.home

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

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