处理操作栏向上按钮的正确方法?

2022-09-01 15:00:39

我使用ActionBarSherlock(尽管我认为这并不重要)。

我有一个主要活动和一个“关于”活动。我希望“关于”活动通过其徽标显示后退箭头,并执行适当的动画等。我不知道如何正确地做到这一点。

目前,我在onOptionsMenuItem下选择在按下Up/Home按钮时启动主要活动,但它很黑客,不能真正正常工作。它播放错误的动画,并且处理多任务处理得很差。

如何正确设置?

以下是我的主要活动中启动“关于”的部分:

Intent aboutIntent = new Intent(MainActivity.this, About.class);
MainActivity.this.startActivity(aboutIntent);

这是我的“关于”活动:

package com.stevenschoen.test;

import android.content.Intent;
import android.os.Bundle;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.MenuItem;

public class About extends SherlockActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.about);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case android.R.id.home:
                // app icon in action bar clicked; go home
                Intent intentHome = new Intent(this, MainActivity.class);
                intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intentHome);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

答案 1

你有没有试过这个(取自安卓网站这里):

在清单中,对于需要转到主活动的每个活动 X,将以下内容添加到代码中:

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

和这个到它的清单xml标签:

<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />

如果您需要在主活动上仍然具有相同的状态,请改用以下代码:

Intent intent = NavUtils.getParentActivityIntent(this); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
NavUtils.navigateUpTo(this, intent);

如果 API 为 16 或更高版本,则可以添加 parentActivityName 的属性,其中包含主活动的路径,而不是元数据 。


答案 2

发现我问题的根源是我不久前所做的清单中的更改:我添加了以下行:

android:launchMode="singleInstance"

所以我的主要活动不会重新启动。将其更改为:

android:launchMode="singleTask"

解决了我的问题,我能够删除所有的东西。我知道有什么问题,Android应该能够更好地处理这个问题,我是对的。检查清单:PonOptionsItemSelected


推荐