我想在我的应用程序中提供向上导航,但我不明白:如果我有一些没有静态父 Activity 的 Activity (可以从不同的 Activity 运行),该怎么做。
例如,我有“主要 Activity ”、“Activity 1”、“Activity 2”和“设置 Activity ”:
- 主要 Activity - 没有父 Activity
- Activity1、Activity2 - 父 Activity 是“Main Activity”
- 设置 Activity - 同样,没有父 Activity ,可以从“主 Activity ”、“Activity 1”和“Activity 2”运行。
要提供 UP 导航(根据 Google 文档),需要执行 3 个步骤:
声明哪个 Activity 是每个 Activity 的适当父 Activity
<application ... > ... <!-- The main/home activity (it has no parent activity) --> <activity android:name="com.example.myfirstapp.MainActivity" ...> ... </activity> <!-- A child of the main activity --> <activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>
显示“向上”按钮:
public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); }
添加按钮点击处理程序:
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Respond to the action bar's Up/Home button case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); }
问题:
- 如何为我的“设置 Activity ”声明父 Activity (第 1 步)?或者我需要修改按钮点击句柄(第 3 步)?
- 启动模式“singleTop”和“standart”有何区别?我需要把它们放在哪里?
提前致谢。
最佳答案
当非根 Activity (除主 Activity 之外的所有 Activity )可以通过应用程序外部的 Intent 启动时,您所描述的提供父 Activity 的方式非常有用。对于这些 Activity ,它很有用:向上点击应该与向后点击不同(向上:返回到父 Activity ,后退:返回到历史记录堆栈,例如返回到外部 Activity )。
对于像 SettingsActivity
这样的 Activity ,您没有特定的父 Activity 。您不应该使用NavUtils.navigateUpFromSameTask(this)
。相反,只需调用 finish()
即可。在应用程序内部导航时,您将获得所需的行为,并且我猜您的 SettingsActivity
不会从其他地方调用。
关于singleTop
和standard
之间的区别:当你在标准模式下启动一个activity时,将会创建一个新的实例。这可能就是您想要的,因此是默认值。在 singleTop
模式下,如果同一个任务中已经存在实例,则不会创建新的实例,而是会重用现有的实例。 onNewIntent()
将被调用。
要指定特定的启动模式,您必须向 list 中的 Activity 条目添加一个属性。对于您的 MainActivity,例如:
<activity
android:name="com.example.myfirstapp.MainActivity"
android:launchMode="singleTop" />
请注意,standard
是默认模式,无需指定。
关于java - 对提供向上导航的质疑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34357884/