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

时间:2013-10-06 10:23:29

标签: android android-activity android-manifest android-navigation

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

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

5 个答案:

答案 0 :(得分:25)

根据docs - >部分android:parentActivityName

  

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

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

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

答案 1 :(得分:4)

虽然应该定义是否需要向上导航或靠背合成,但请注意,API级别16中引入了属性android:parentActivityName

对于先前版本,可以从在<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

答案 2 :(得分:3)

您不一定需要在parentActivity中定义AndroidManifest.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,那么系统会读取此属性以确定当用户按下操作栏中的“向上”按钮时应启动哪个活动。即,它将创建parentAcivity的新实例,表示它将调用父活动的onCreate()

答案 3 :(得分:0)

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

如果你有这样的BaseActivity:

public class BaseActivity extends Activity{}

public class MyActivity extends BaseActivity{}

只需要注册MyActivity,因为系统不会调用BaseActivity,而是你。

答案 4 :(得分:0)

没有必要在manifest中指定父活动

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

navigationUp您还可以使用setDisplayHomeAsUpEnabled(true);onSupportNavigateUp()方法Take a Look at this