我必须在Android Manifest中指定父活动名称吗?

J. *_* K. 15 android android-manifest android-activity android-navigation

我有一项活动开始另一项活动.
我是否必须在Android Manifest中指定父活动?我问这个因为可能还有其他活动会启动这个,所以我应该指定所有这些活动吗?

android:parentActivityName="com.example.myfirstapp.MainActivity" 
Run Code Online (Sandbox Code Playgroud)

Szy*_*mon 29

根据 文档 - >部分android:parentActivityName:

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

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

请在此处查看有关向上导航的信息:http://developer.android.com/design/patterns/navigation.html


小智 7

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

ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
Run Code Online (Sandbox Code Playgroud)

并实现这一点:

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

但是,如果您parentActivity在清单中定义了,则系统会读取此属性以确定当用户按下操作栏中的向上按钮时应启动哪个活动。即,它将创建 的新实例,这parentAcivity意味着它将调用onCreate()父活动的 。


小智 7

虽然应该定义是否需要向上导航或后退综合,但是请注意,该属性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>
Run Code Online (Sandbox Code Playgroud)

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

除非知道API级别,否则<meta-data>建议同时使用inline和inline规范。

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

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