我在我的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语句?
由于
答案 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();
}