在操作栏上显示后退按钮

Dan*_*aor 166 android android-actionbar android-homebutton

我正在尝试显示Back buttonAction bar移动上一页/活动或主页(第一次打开).我不能这样做.

我的代码.

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)

代码在onCreate.

小智 197

这是一个简单的显示后退按钮

actionBar.setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后你可以在onOptionsItemSelected上自定义后台事件

case android.R.id.home:
this.finish();
return true;
Run Code Online (Sandbox Code Playgroud)

  • 确保在AndroidMenifest.xml中设置父活动以使R.id.home按钮起作用. (2认同)

Inz*_* IT 180

我认为这onSupportNavigateUp()是最好和最简单的方法,请检查以下步骤.步骤1是必要的,第二步有替代方案.

步骤1显示后退按钮:onCreate()方法中添加此行以显示后退按钮.

assert getSupportActionBar() != null;   //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true);   //show back button
Run Code Online (Sandbox Code Playgroud)

第2步实现后退单击:覆盖此方法

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

多数民众赞成你完成
或步骤2备选:您可以将清单文件中的元素添加为

<meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="MainActivity" />
Run Code Online (Sandbox Code Playgroud)

编辑:如果你没有使用AppCompatActivity,那么不要使用supportword,你可以使用

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`

// And override this method
@Override 
public boolean onNavigateUp(){ 
     finish(); 
     return true; 
}
Run Code Online (Sandbox Code Playgroud)

感谢@atariguy的评论.

  • 如果你没有使用Actionbar的支持库,修改如下:`getActionBar().setDisplayHomeAsUpEnabled(true);``@Override public boolean onNavigateUp(){finish(); 返回true; }` (3认同)
  • 当您需要将数据发送回父活动或者您希望在父活动中保留EditText的值时,此解决方案很有用.我尝试了`onOptionsItemSelected`解决方案,但未能这样做. (2认同)
  • 最佳解决方案+10. (2认同)

Mat*_*ers 66

魔术发生在onOptionsItemSelected.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 当用户单击后退按钮时,使用`this.onBackPressed();`方法. (2认同)

hoo*_*oot 46

官方解决方案

将这两个代码段添加到SubActivity中

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

添加元数据和parentActivity以显示以支持更低的sdk.

 <application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.SubActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

参考此处:http://developer.android.com/training/implementing-navigation/ancestral.html

  • 注意:如果使用支持库来实现向后兼容性,则需要使用"getSupportActionBar()"而不是"getActionBar()".这是最完整,最正式的答案. (5认同)

Abh*_*hek 31

将这些行添加到onCreate()

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
   actionBar.setHomeButtonEnabled(true);
   actionBar.setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

并在onOptionItemSelected中

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                //Write your logic here
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助..!


小智 22

尝试此代码,仅在需要后退按钮时才考虑它.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //YOUR CODE
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //YOUR CODE
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Bru*_*res 16

在你的onCreate方法上添加:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml父活动中定义时(按下操作栏中的后退按钮后将调用的活动):

<activity>Manifest 的定义中,添加以下行:

android:parentActivityName="com.example.activities.MyParentActivity"
Run Code Online (Sandbox Code Playgroud)


Khu*_*aza 10

在您的onCreate()方法中添加这一行

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

并且,在同一个Activity中,添加这个方法来处理按钮点击

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)


Avi*_*han 8

我知道我有点迟了,但能够通过直接关注文档解决这个问题.

添加元数据标记AndroidManifest.xml(因此系统知道)

 <activity
        android:name=".Sub"
        android:label="Sub-Activity"
        android:parentActivityName=".MainChooser"
        android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainChooser" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

接下来,启用您的后退(向上)按钮 MainActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_child);

    // my_child_toolbar is defined in the layout file 
    Toolbar myChildToolbar =
        (Toolbar) findViewById(R.id.my_child_toolbar);
    setSupportActionBar(myChildToolbar);

    // Get a support ActionBar corresponding to this toolbar 
    ActionBar ab = getSupportActionBar();

    // Enable the Up button 
    ab.setDisplayHomeAsUpEnabled(true);
    } 
Run Code Online (Sandbox Code Playgroud)

而且,你将全部成立!

资料来源:Android开发者文档


小智 5

我知道以上是很多有用的解决方案,但这次我读了这篇文章(当前的Android Studio 2.1.2与sdk 23),上面的一些方法不起作用.

以下是我的子活动解决方案是MapsActivity

首先,您需要添加parentActivity

AndroidManifest.xml中

像这样 :

<application ... >
    ...
    <!-- Main activity (which has no parent activity) -->
    <activity
        android:name="com.example.myapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        .....
        android:parentActivityName=".MainActivity" >
        <!-- Support Parent activity for Android 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myapp.MainActivity" />
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

其次,确保您的子活动扩展AppCompatActivity,而不是FragmentActivity.

第三,覆盖onOptionsItemSelected()方法

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon action bar is clicked; go to parent activity
                this.finish();
                return true;
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助!


小智 5

这很简单,对我很有效

将此添加到 onCreate() 方法中

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

在 oncreate() 方法之外添加这个

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}
Run Code Online (Sandbox Code Playgroud)