22

I have an activity that starts another activity.
Is it mandatory that I specify the parent activity in the Android Manifest? Im asking this because there might be other activities that will start this one as well, so should I specify all of them?

android:parentActivityName="com.example.myfirstapp.MainActivity" 
4

5 回答 5

38

根据 文档- >部分android:parentActivityName

系统读取此属性以确定当用户按下操作栏中的向上按钮时应该启动哪个活动。系统还可以使用此信息将活动的后台堆栈与TaskStackBuilder.

因此,您只需要指定是否要使用向上导航(而不是通过后退按钮导航)或TaskStackBuilder。在其他情况下,您不需要它。

有关更多信息,请参阅向上导航文档。(从原始存档,现在重定向到设计导航图的 Jetpack Navigation 文档

于 2013-10-06T10:26:07.540 回答
13

如果需要向上导航或回栈合成,则应定义它,但请注意该属性android:parentActivityName是在 API 级别 16 中引入的。

对于以前的版本,父活动信息是从<meta-data>在子标签内声明的标签内定义的属性访问的<activity>

例子:

    <activity
        android:name=".DetailActivity"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity"/>
    </activity>

<meta-data>标签内部,将android:name属性设置为android.support.PARENT_ACTIVITY,并将android:value属性设置为父活动类名(即与分配给的类名相同android:parentActivityName)。

除非已知 API 级别,否则<meta-data>建议使用内联规范和内联规范。

有关指定父活动的更多信息,请参阅:https ://developer.android.com/training/implementing-navigation/ancestral.html#SpecifyParent

此外,考虑在android:launchMode主标签内定义属性<activity>以设置所需的向上导航行为:https ://developer.android.com/guide/topics/manifest/activity-element.html#lmode

于 2018-03-19T05:00:13.197 回答
7

您不一定需要parentActivityAndroidManifest.xml. 您可以使用以下代码启用后退导航:

ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

并实现这一点:

public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    if (itemId == android.R.id.home) {
        onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}

但是如果你parentActivity在manifest中定义了,那么系统会读取这个属性来决定当用户按下action bar中的Up按钮时应该启动哪个activity。即,它将创建 的新实例,这parentAcivity意味着它将调用onCreate()父活动的 。

于 2017-04-26T03:41:40.237 回答
0

您必须在清单中指定您通过 Intent 或 Launchers 调用的每个 Activity,以便系统可以找到它。因此,将一个 Activity 标记为您的 App 可以启动的 Launcher,并注册您在 App 中调用的所有其他 Activity。

如果您有这样的 BaseActivity:

public class BaseActivity extends Activity{}

public class MyActivity extends BaseActivity{}

比您只需要注册 MyActivity,因为 BaseActivity 不是由系统调用而是由您调用的。

于 2013-10-06T10:29:38.457 回答
0

不,没有必要manifest像这样指定父活动

android:parentActivityName="com.example.myfirstapp.MainActivity" 

因为navigationUp你也可以使用setDisplayHomeAsUpEnabled(true);andonSupportNavigateUp()方法看看这个

于 2016-06-29T08:40:41.363 回答