在不知道其类类型的情况下调用对象上的方法

时间:2013-05-29 11:55:30

标签: java android fragment

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

我想在片段B上调用一个方法。这个方法存在于大多数但不是所有可以显示的片段类型中。

这就是我所拥有的:

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语句?

由于

3 个答案:

答案 0 :(得分:3)

您可以将Fragment工具设为Refreshable接口,然后进行检查。

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

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

答案 1 :(得分:2)

您可以使用instanceof关键字来查看该片段是否是这些特殊片段之一的实例。这种方法只是在某些片段中你自己制作的或者是API的一部分吗?

如果是你自己创建的那些片段,则实现一个名为RefreshableFragment的接口。这个接口将包含所述方法,然后你要做的就是:

if(frag!=null && frag instanceof RefreshableFragment)
    frag.refresh();

答案 2 :(得分: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();
}