【问题标题】:Navigate up from activity back to fragment从活动向上导航回片段
【发布时间】:2025-12-24 17:10:06
【问题描述】:

假设我有两个名为A_ActivityB_Activity 的活动。 A_Activity 有 3 个片段,分别命名为 A_FragmentB_FragmentC_FragmentA_Activity 充当三个片段的基础活动。

B_Fragment,可以导航到B_Activity,从B_Activity可以导航到B_Fragment。从A_Activity 可以导航到A_FragmentB_FragmentC_Fragment。最后,从A_FragmentB_FragmentC_Fragment,可以导航到任何其他片段。

以下是活动层次结构及其各自片段的任意表示:

A_Activity
    A_Fragment
    B_Fragment
        B_Activity
    C_Fragment

假设A_FragmentA_Activity 的默认片段。

我目前对此的解决方案是:在B_Activity的主页图标被选中,我正在创建一个新意图:

Intent intent = new Intent(B_Activity.this, A_Activity.class);
intent.putExtra("data_to_start_B_Fragment", "B"); // instead of starting A Fragment
startActivity(intent);

B_Activity 导航到B_Fragment 的正确方法是什么?

【问题讨论】:

  • B_Activity 必须是 Activity 是否有原因?你能把它作为另一个 Fragment 来实现吗?
  • @Code-Guru 每个片段代表一个导航抽屉项目,而B_Activity 只是与B_Fragment 不同的可点击链接。虽然我不太确定,但我认为将其作为一项活动更有意义。

标签: android android-intent android-fragments android-navigation


【解决方案1】:

B_Fragment 开始,从B_Activity 开始,使用startActivityForResult(...) getApplicationcontext 而不是getActivity().getApplicationContext()

Activity B, 中,您使用setResult(data here) 返回片段并完成ActivityB 以返回fragment B

【讨论】:

  • 我在考虑这个,但B_Activity 可能有自己的子活动和子片段。
  • B_Activity 有一个子类是 B_Fragment。 B_Fragment 的子类是 A_Activity。如果这样做,A_activity 不是 B_Activity 的子活动。其他干净的方法是从 ActivityA 开始 ActivityB,然后用来自 ActivityB 的数据为 ActivityA 设置结果,ActivityA 为 FragmentB 传输所有接收到的数据。
【解决方案2】:

从 B_Activity 到 B_Fragment(如果从 B_Fragment 启动 B_Activity),您只需要检测来自主页按钮或系统后退按钮的操作,然后通过调用终止 Activity

finish()

例如在 B_Activity 中

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (id == android.R.id.home) {
        finish();
    }

    return super.onOptionsItemSelected(item);
}

【讨论】: