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
相关产品推荐
相关产品推荐

