You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android不同导航图跨导航实现:从MyHistoryFragment跳转至ProfileFragment

跨Activity导航到指定Fragment的实现方案

1. 修改DashBoardActivity,支持接收导航参数

在DashBoardActivity的onCreate方法中添加逻辑,判断是否需要直接跳转到ProfileFragment:

Kotlin 实现

class DashBoardActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dashboard)

        // 替换为你DashBoardActivity布局中NavHostFragment的实际ID
        val navController = findNavController(R.id.nav_host_fragment_dashboard)

        // 接收启动参数,跳转到指定Fragment
        intent.getIntExtra("DESTINATION_ID", -1).takeIf { it != -1 }?.let { destinationId ->
            navController.navigate(destinationId)
        }
    }
}

Java 实现

public class DashBoardActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);

        // 替换为你DashBoardActivity布局中NavHostFragment的实际ID
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_dashboard);

        int destinationId = getIntent().getIntExtra("DESTINATION_ID", -1);
        if (destinationId != -1) {
            navController.navigate(destinationId);
        }
    }
}

2. 在MyHistoryFragment中启动DashBoardActivity并传递参数

在需要触发导航的位置(比如按钮点击事件),添加启动逻辑:

Kotlin 实现

// 示例:按钮点击事件中触发导航
view.findViewById<Button>(R.id.btn_jump_to_profile).setOnClickListener {
    val intent = Intent(requireContext(), DashBoardActivity::class.java).apply {
        // 传入ProfileFragment的ID
        putExtra("DESTINATION_ID", R.id.fragmentProfile)
        // 可选Flag:避免重复创建实例,销毁栈中上方的Activity(按需启用)
        flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
    }
    startActivity(intent)
}

Java 实现

// 示例:按钮点击事件中触发导航
Button jumpBtn = view.findViewById(R.id.btn_jump_to_profile);
jumpBtn.setOnClickListener(v -> {
    Intent intent = new Intent(getContext(), DashBoardActivity.class);
    // 传入ProfileFragment的ID
    intent.putExtra("DESTINATION_ID", R.id.fragmentProfile);
    // 可选Flag:避免重复创建实例,销毁栈中上方的Activity(按需启用)
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
});

补充说明

  • 务必替换代码中R.id.nav_host_fragment_dashboard为你DashBoardActivity布局里NavHostFragment的真实ID。
  • 如果需要给ProfileFragment传递额外数据,可以在Intent中添加更多extra,再在ProfileFragment中通过arguments获取;或者结合navController.navigate()方法传递Bundle。
  • 关于Intent Flags:FLAG_ACTIVITY_CLEAR_TOP会销毁目标Activity之上的所有实例,FLAG_ACTIVITY_SINGLE_TOP会复用已在栈顶的目标Activity,可根据业务需求选择是否添加。

内容的提问来源于stack exchange,提问作者NRUSINGHA MOHARANA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:35:23