Android:在不同的 fragment 中调用相同的方法

标签 android android-fragments

我有 1 个主要 Activity 和 4 个 fragment 。每个 fragment 都有相同的方法名,每个 fragment 做不同的事情(初始化数据相同,每个 fragment 对数据做的事情不同)。

目前我检查哪个 fragment 处于 Activity 状态并调用该方法:

if (getSupportFragmentManager().findFragmentByTag("f1") != null)
   Objects.requireNonNull((FragmentF1) getSupportFragmentManager().findFragmentByTag("f1")).setupData(true);
else if (getSupportFragmentManager().findFragmentByTag("f2") != null)
   Objects.requireNonNull((FragmentF2) getSupportFragmentManager().findFragmentByTag("f2")).setupData(true);

我想调用那个方法,不管我现在有什么 fragment 。是否可以?

此外,requireNonNull 是为了避免 lint 警告,尽管我在上面的一行中执行了 null 检查,有没有办法让这段代码更清晰?

最佳答案

您可以为 fragment 创建基类或抽象类

public abstract class BaseFragment extends AppCompatActivity {

    abstract void setupData(boolean b);
}

然后每个 fragment 继承自 BaseFragment 类并覆盖 setupData(boolean b)。 找到 fragment 后,检查他是否是 BaseFragment 的实例并调用该方法

Fragment fragment = getSupportFragmentManager().findFragmentByTag("tag")

    if (fragment instanceof BaseFragment){
         fragment.setupData(true);
       }

关于Android:在不同的 fragment 中调用相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57011327/

相关文章:

Android:如何在聚焦时将 ScrollView 中的 EditText 放在另一个 View 上方?

android - 创建和定位 float 操作按钮

java - 从 Fragment 控制套接字输入流和输出流 (Android)

android - 使用 FragmentStatePagerAdapter 从 ViewPager 中动态删除一个项目

java - Android onCreate 在手机重启后调用两次,使fragment停止工作

java - ExoPlayer onResume() 恢复播放状态

android - 在 ListView 上一次只想单击一项

javascript - Facebook 好友邀请的 GameRequestDialog 总是要求登录,即使用户已经登录

java - 无法在全新安装的 Android Studio 0.8.1 上启动 Gradle 守护进程

android - 不能同时使用 `BottomNavigationView` 和 `ViewPager` 和 `TabLayout`