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

时间:2019-07-12 17:08:31

标签: android android-fragments

我有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仍然可以避免出现棉绒警告,有没有办法使此代码更简洁?

3 个答案:

答案 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(“此处您的事件”);

并在片段中注册事件,以便当片段当前启动且事件已发布时,片段将接收事件

read more about event bus