27

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

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

目前,我在 onOptionsMenuItemSelected 下可以在按下 Up/Home 按钮时启动 Main 活动,但它很笨拙并且不能正常工作。它播放错误的动画,并且处理多任务处理很差。

我该如何正确设置?

这是我的主要活动中启动 About 的部分:

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

7 回答 7

38

你也试过这个吗(取自Android网站):

在清单中,对于需要转到主活动的每个活动 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属性,其中包含主活动的路径,而不是元数据。

于 2013-11-30T23:03:39.450 回答
14

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

android:launchMode="singleInstance"

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

android:launchMode="singleTask"

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

于 2012-07-03T09:55:40.287 回答
11

您可以使用代码或 XML 处理操作栏按钮。

检查此代码

如果你想以编程方式在onCreate()方法中添加这一行

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

并覆盖此方法onSupportNavigateUp()

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

或以非编程方式,您可以将元添加到清单文件中

<activity android:name="Current Activity"
        android:parentActivityName="Activity you want to open">
    </activity>

注意:确保 Actionbar 不为空。

于 2016-06-08T03:31:13.857 回答
10

在你的onCreate(Bundle savedInstanceState),做

ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

然后在你的onOptionsItemSelected(MenuItem item), 做

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // go to previous screen when app icon in action bar is clicked
            Intent intent = new Intent(this, PreviousActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
    }
    return super.onOptionsItemSelected(item);
}
于 2012-07-03T04:37:40.217 回答
5

对于只想返回上一个活动的人来说,这是最简单的解决方案:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish(); //this method close current activity and return to previous
            return true;
    }
    return super.onOptionsItemSelected(item);
}
于 2014-11-27T16:36:34.390 回答
0
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings2);
    //here is to put the up back button in the Activity
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
// here is the code to handle to go back to the activity which sent you to this current one
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}
于 2021-01-23T18:00:30.533 回答
-1

确保您的 android:minSdkVersion="11" 可以在清单文件中看到,向上图标已包含在 APK 11 中。我制作了一个小示例,请尝试以下链接,这可能会帮助您导入您的工作空间

http://www.mediafire.com/?hktdvts7yyduwv1

于 2013-10-21T10:21:37.457 回答