java - 对提供向上导航的质疑

标签 java android

我想在我的应用程序中提供向上导航,但我不明白:如果我有一些没有静态父 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 个步骤:

  1. 声明哪个 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>
    
  2. 显示“向上”按钮:

    public void onCreate(Bundle savedInstanceState) {
        ...
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    
  3. 添加按钮点击处理程序:

    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);
    }
    

问题:

  1. 如何为我的“设置 Activity ”声明父 Activity (第 1 步)?或者我需要修改按钮点击句柄(第 3 步)?
  2. 启动模式“singleTop”和“standart”有何区别?我需要把它们放在哪里?

提前致谢。

最佳答案

当非根 Activity (除主 Activity 之外的所有 Activity )可以通过应用程序外部的 Intent 启动时,您所描述的提供父 Activity 的方式非常有用。对于这些 Activity ,它很有用:向上点击应该与向后点击不同(向上:返回到父 Activity ,后退:返回到历史记录堆栈,例如返回到外部 Activity )。

对于像 SettingsActivity 这样的 Activity ,您没有特定的父 Activity 。您不应该使用NavUtils.navigateUpFromSameTask(this)。相反,只需调用 finish() 即可。在应用程序内部导航时,您将获得所需的行为,并且我猜您的 SettingsActivity 不会从其他地方调用。

关于singleTopstandard之间的区别:当你在标准模式下启动一个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/

相关文章:

java - GWT 模块可能需要(重新)编译远程调试

android - 如何更改 Robospice/Jackson 中的根 JSON 数组元素名称?

java - JAX-WS 服务在使用默认构造函数时给出 FileNotFoundException?

Android 可跨度 : Copy/Cut custom Span in Edittext only Pastes the base class

java - 假设连接丢失,如何停止 HTTP 连接?

java - android-查找离我当前位置最近的位置

android - 触发 IO Android 主题

java - java中如何将json文件解析为json对象

java - 将多个表映射到一个 List Hibernate

java - 如何检查字符串是否为空?