我有一项活动开始另一项活动 我是否必须在Android Manifest中指定父活动? 我问这个是因为可能还有其他活动会启动这个活动,所以我应该指定所有活动吗?
android:parentActivityName="com.example.myfirstapp.MainActivity"
答案 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