2

我在我的 android 应用程序中使用 Fragment。目前我有 2 个片段以拆分视图样式显示,让我们调用片段 A 和片段 B。片段 B 经常更改,并且可以更改为许多不同类型的片段。

我希望在 Fragment B 上调用一个方法。该方法存在于大多数但不是所有可以显示的 Fragment 类型中。

这是我所拥有的:

FragmentManager fm = getSupportFragmentManager();
Fragment frag = fm.findFragmentByTag("ContentFrag");
if (frag != null) {
    if (frag.getClass().equals(ExampleFragment1.class))
        ((ExampleFragment1)frag).refresh();
    else if (frag.getClass().equals(ExampleFragment2.class))
        ((ExampleFragment2)frag).refresh();
    else if (frag.getClass().equals(ExampleFragment3.class))
        ((ExampleFragment3)frag).refresh();
}

这就是我想要的:

FragmentManager fm = getSupportFragmentManager();
Fragment frag = fm.findFragmentByTag("ContentFrag");
if (frag != null) {
    frag.refresh();
}

有什么方法可以实现这一点,还是我必须写一大堆 if 语句?

谢谢

4

3 回答 3

3

你可以让你Fragment的 s 实现一个Refreshable接口,你可以检查它。

if(frag instanceof Refreshable)
    ((Refreshable)frag).refresh();
}

这不漂亮,但比上面的代码更漂亮。

于 2013-05-29T12:01:43.607 回答
2

您可能会使用 instanceof 关键字来查看片段是否是这些特殊片段之一的实例。这个方法是你自己制作的还是 API 的一部分?

如果是你自己让这些片段实现了一个名为 RefreshableFragment 之类的接口。该接口将包含上述方法,那么您所要做的就是:

if(frag!=null && frag instanceof RefreshableFragment)
    frag.refresh();
于 2013-05-29T12:02:52.970 回答
2

解决方案是创建一个名为 RefreshableFragment 的父类,该类具有 refresh() 方法:

public class RefreshableFragment extends Fragment {

public void refresh();
}

你所有的片段类都应该扩展这个类:

public class ExampleFragment1 extends RefreshableFragment {

    public void refresh() {
       // implementation
    }

}

然后您可以在代码中使用刷新的片段:

FragmentManager fm = getSupportFragmentManager();
RefreshableFragment frag = (RefreshableFragment)fm.findFragmentByTag("ContentFrag");
if (frag != null) {
    frag.refresh();
}
于 2013-05-29T12:04:57.597 回答