使Android设备上的“向上”按钮像“返回”按钮一样工作

32
我正在处理的 Android 应用设计要求 "上一级" 按钮的行为与 "返回" 按钮相同,但我不确定如何实现这一点。我知道必须为活动指定 android:parentActivityName 才能在活动中显示 "上一级" 按钮,但指定固定的父活动并不适用于该活动。假设有 A、B 和 C 三个活动:如果为每个活动指定了 android:parentActivityName,那么 B 和 C 的父活动可能是 A,但这意味着每次从 B 或 C 活动按 "上一级" 按钮时,我们都会停留在 A 活动(这不总是希望发生的)。有没有人有这方面的经验?

你是怎么让它工作的?我也有同样的疑问。 - sam_k
2个回答

60

从你的所有三个活动中添加以下内容:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }

    return(super.onOptionsItemSelected(item));
}

当您在应用程序中按向上按钮时,它将调用具有android.R.id.home ID的onOptionsItemSelected,只需捕获该情况并手动调用onBackPressed()即可。

您还可以考虑创建一个BaseActivityActivityAActivityBActivityC将各自扩展),然后您只需要将上述方法放入BaseActivity类中。这样可以避免代码重复,并且更易于维护。 - ban-geoengineering
在 Deeplink 的情况下,这种方法行不通。你如何在 Deeplink 的情况下返回到父活动? - sam_k
你说得对,但这是因为按返回键并不是设计用来带你到具有Deeplink的父活动的。也许你应该寻找一些关于在Android中转到父活动的问题。 - Eluvatar
非常好的回答!这是否意味着没有创建新的活动? - Daniel Carpio Contreras

0

KOTLIN

对于在 Kotlin 时代来到这里的任何人,如果您使用 NavController 设置工具栏, "Up" 按钮将像返回按钮一样运作。

toolbar.setupWithNavController(findNavController(R.id.nav_host_fragment),findViewById(R.id.full_drawer_layout))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接