2

我看到了插入符号,但是当我单击它时没有任何反应。我在哪里告诉它到家并设置哪个活动是家?

4

3 回答 3

10

你需要这条线:

getActionBar().setDisplayHomeAsUpEnabled(true);

把它放进去onCreate()

这将使它可点击。您将需要处理单击事件。这是通过覆盖完成的onOptionsItemSelected()

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

如果你想使用 NavUtils,(我已经看到 ADT 插件在制作活动时使用了它)你可以像这样替换更改实现:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
              NavUtils.navigateUpFromSameTask(this);
                    return true;
        default: 
                      return super.onOptionsItemSelected(item); 
        }
    }

不要忘记

import android.support.v4.app.NavUtils;

此外,您可以将其添加到您的活动节点:

    <activity
        android:name=".SomeActivity"
        android:label="@string/activity_label" >
         <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.mypackage.MainActivity" />
    </activity>

NavUtils 通常是更好的方法。有关详细信息,请参阅官方 Android指南

于 2013-01-13T21:00:52.927 回答
5

在你的onCreate你有:

getActionBar().setDisplayHomeAsUpEnabled(true);

然后使用:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
于 2013-01-13T21:01:36.493 回答
3

更新以解决下面的评论,正确地指出我的原始答案并不适用于所有情况。“home/up”按钮应该分别带您进入 Home Activity 或 Parent Activity。从ActionBar 文件来看——

默认情况下,您的应用程序图标出现在左侧的操作栏中。如果您愿意,您可以启用该图标以充当操作项。为了响应用户对图标的操作,您的应用程序应该执行以下两项操作之一:

Go to the application "home" activity, or
Navigate "up" the application's structural hierarchy

实现“家”很简单。启动应用程序的主活动(通常是您的主启动活动)的意图,如果存在则清除现有实例的后台堆栈-

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

"up" 是类似的,除了你应该使用

getActionBar().setDisplayHomeAsUpEnabled(true);

在您onCreate让图标显示为“up”而不是“home”,并启动父活动的实例。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
            parentActivityIntent.addFlags(
                    Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(parentActivityIntent);
            finish();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

在这两种情况下,对于可以从应用程序外部启动的活动,您应该添加FLAG_ACTIVITY_NEW_TASK以启动新任务而不是调用者任务。

Activity如果您可以从另一个应用程序启动,并且想要为您的应用程序构建一个返回堆栈以返回根目录,那么“向上”可能会变得更加复杂。有关更多信息,请参阅本指南

如下所示,我的原始答案在指南中被认为是错误的形式,因为它将主页/向上按钮视为“返回”。它将带您到调用此活动的活动,不一定是家庭或父母。对于具有严格的活动树层次结构的应用程序,它可以很好地“向上”运行,因为给定的活动总是由其父项启动。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2013-01-13T21:01:19.857 回答