【发布时间】:2021-11-12 04:18:22
【问题描述】:
为了完成这个任务,我目前使用的是一个 FragmentListner 接口,但是我需要使用 create 一个静态方法来获取 Fragment 的实例。为了避免这种静态方式的方法,我正在考虑是否有更好的方法来做到这一点。我需要在 Activity 上获取当前可见的片段实例,并在此基础上调用该片段的方法。
如果它不是 NavHost 片段,我很容易得到下面这样的片段实例,并且可以从中调用任何公共方法。
Fragment fragment = getCurrentFragment();
if (fragment instanceof MyFragment) {
((MyFragment) fragment).doFragmentOperation();
}
private Fragment getCurrentFragment() {
return this.getSupportFragmentManager()
.findFragmentById(R.id.framelayout);
}
但是我可以通过 addOnDestinationChangedLisnter 方法知道哪个片段是可见的,如下所示
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
switch (destination.getId()) {
case R.id.navigation_x:
Toast.makeText(this, "X fragment is visible", Toast.LENGTH_SHORT).show();
break;
case R.id.navigation_y:
Toast.makeText(this, "Y fragment is visible", Toast.LENGTH_SHORT).show();
break;
case R.id.navigation_z:
Toast.makeText(this, "Z fragment is visible", Toast.LENGTH_SHORT).show();
break;
}
}
});
这里我们可以通过destination id知道可见的fragment,有什么可以直接返回给我们可见的fragment实例吗?
【问题讨论】:
标签: android android-fragments android-activity android-fragmentactivity android-jetpack-navigation