我有一个包含 3 个片段的底部导航视图 我想从片段 1 内部而不是从活动中将片段 1 更改为片段 2 有谁知道怎么做吗?
假设片段 1 中有一个按钮。单击该按钮,然后它会打开片段 2,并具有 BottomNavigation 项目焦点。
如果您使用导航组件,那么您只需编写
val btnMove = rootView.findViewById<Button>(R.id.btnMove)
btnMove.setOnClickListener {
findNavController().navigate(R.id.favoriteFragment) //here R.id.favoriteFragment is your fragment id where you want to navigate
}
您需要处理片段1内某个项目的点击事件,然后您需要在MainActivity内传递一些内容。这就是我所做的:
Fragment.java:
item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
navigateToSecondFragment();
}
});
private void navigateToSecondFragment() {
if (getActivity() instanceof MainActivity) {
MainActivity mainActivity = (MainActivity) getActivity();
FragmentManager fm = mainActivity.getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.hide(FirstFragment.this);
transaction.show(mainActivity.getSecondFragment());
transaction.commit();
mainActivity.setActive(mainActivity.getSecondFragment());
mainActivity.getBinding().bottomNavigationView.setSelectedItemId(R.id.bottom_navigation_item_that_you_want_to_reflect);
}
}
MainActivity.java:
public Fragment getSecondFragment() {
return secondFragment;
}
public void setActive(Fragment fragment) {
active = fragment;
}
public ActivityMainBinding getBinding() {
return binding;
}
这将在底部导航栏上设置一个活动项目,并最终显示第二个片段,而无需在 MainActivity 中使用 getSupportFragmentManager。这是java,但你可以将它转换成kotlin。