gpt4 book ai didi

android - 为什么 "up"按钮将我移动到主要 Activity 而不是父 Activity

转载 作者:行者123 更新时间:2023-11-30 02:58:23 24 4
gpt4 key购买 nike

我有一个包含三个 Activity 的应用程序。

MainActivity 看起来像这样:

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button b = new Button(this);
b.setText("click me to go to child activity");
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, ChildActivity.class));
}
});
setContentView(b);
}
}

看起来像这样的 ChildActivity:

public class ChildActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TextView(this) {{
setText("I'm the child activity");
}});
}
}

和看起来像这样的 OtherActivity:

public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TextView(this) {{
setText("I'm other activity");
}});
}
}

在 list 中我有这样的声明:

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name="pl.psobolewski.test.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="pl.psobolewski.test.ChildActivity" />
<activity android:name="pl.psobolewski.test.OtherActivity" />
</application>

现在当我启动应用程序时,它从 MainActivity 开始,从那里我可以转到 ChildActivity,但无法转到 OtherActivity。

然后在 list 中我更改了这一行:

<activity android:name="pl.psobolewski.test.ChildActivity" />

到:

<activity android:name="pl.psobolewski.test.ChildActivity" android:parentActivityName="pl.psobolewski.test.OtherActivity" />

现在我在我的手机上再次启动这个应用程序,它有 Android API 16。它从 MainActivity 开始,在那里我可以按下按钮并移动到 ChildActivity。现在 ChildActivity 看起来与以前有点不同:ActionBar 上的 Logo 有一个类似箭头的小图标(文档称之为“左向插入符”),这意味着它可以用于向上移动。但是当我按下它时,我不会转到 OtherActivity - 即使它被声明为 ChildActivity 的父级 - 而是转到 MainActivity。

我发现它与 Android 文档相反,它说: http://developer.android.com/guide/topics/manifest/activity-element.html“机器人:parentActivityName系统读取此属性以确定当用户按下操作栏中的向上按钮时应启动哪个 Activity 。系统还可以使用此信息通过 TaskStackBuilder 合成 Activity 的返回堆栈。”

我还认为在不调用 setDisplayHomeAsUpEnabled 的情况下添加 android:parentActivityName 属性不会将应用程序 Logo 变成向上按钮 - http://developer.android.com/training/implementing-navigation/ancestral.html 上的文档如此建议。

我的问题是:为什么“向上”按钮将我移动到 MainActivity 而不是 OtherActivity?

最佳答案

Action Bar 向上导航处理程序的实现方式是,如果当前 Activity 的父 Activity 没有父 Activity ,则使用 ACTION_MAIN 和 CATEGORY_LAUNCHER 创建 Intent 以启动 Activity 。这导致 MainActivity 被启动。查看 Activity.java 中 getParentActivityIntent() 的定义

为了克服这个问题,在您的 ChildActivity.java 中重写以下 2 个 Activity 方法。

@Override
public boolean shouldUpRecreateTask(Intent intent) {
return true; // This creates a new task stack
}

@Override
public Intent getParentActivityIntent() {
Intent intent = new Intent(this, OtherActivity.class);
return intent;
}

如果您不想覆盖 getParentActivityIntent,那么您需要在 AndroidManifest.xml 文件中为 OtherActivity 定义一个父 Activity,以克服前面提到的原因。

如果您不覆盖 shouldUpRecreateTask,因为 OtherActivity 没有出现在历史堆栈中,它将删除所有 Activity ,直到到达任务的根 Activity ,从而导致“应用内主页”行为。

关于android - 为什么 "up"按钮将我移动到主要 Activity 而不是父 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com