我有1个主要活动和4个片段。每个片段具有相同的方法名称,每个片段执行不同的操作(初始化数据相同,每个片段对数据执行的操作不同)。
此刻,我检查哪个片段处于活动状态,然后调用该方法:
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);
无论我现在有什么片段,我都想调用该方法。可能吗?
此外,尽管我在上面一行执行了空检查,但requireNonNull仍然可以避免出现棉绒警告,有没有办法使此代码更简洁?
答案 0 :(得分:1)
您可以为片段创建基类或抽象类
public abstract class BaseFragment extends AppCompatActivity {
abstract void setupData(boolean b);
}
然后,每个片段都继承自BaseFragment类,并覆盖setupData(boolean b)
。
找到片段后,检查他是否安装了BaseFragment并调用方法
Fragment fragment = getSupportFragmentManager().findFragmentByTag("tag")
if (fragment instanceof BaseFragment){
fragment.setupData(true);
}
答案 1 :(得分:0)
您可以在以片段为参数的活动中声明此方法,并且每次调用此方法时,都要检查传递的片段并根据该逻辑进行逻辑处理。
public static void initData(Fragment fragment){
if (fragment instanceof FirstFragment){
// Do your logic here
}else if(fragment instanceof SecondFragment){
// Do your logic here
}
}//initData()
答案 2 :(得分:0)
何时应调用方法?
我认为您应该使用事件总线, 因此,使用事件总线时,应将事件发布到活动片段中
EventBus.getDefault()。post(“此处您的事件”);
并在片段中注册事件,以便当片段当前启动且事件已发布时,片段将接收事件