Java 在不知道对象的类类型的情况下对对象调用方法
我在android应用程序中使用Fragment。目前,我有两个片段以分割视图样式显示,让我们调用片段A和片段B。片段B经常更改,并且有许多不同类型的片段可以更改 我希望对片段B调用一个方法。这个方法存在于大多数但不是所有可以显示的片段类型中 以下是我所拥有的:Java 在不知道对象的类类型的情况下对对象调用方法,java,android,fragment,Java,Android,Fragment,我在android应用程序中使用Fragment。目前,我有两个片段以分割视图样式显示,让我们调用片段A和片段B。片段B经常更改,并且有许多不同类型的片段可以更改 我希望对片段B调用一个方法。这个方法存在于大多数但不是所有可以显示的片段类型中 以下是我所拥有的: FragmentManager fm = getSupportFragmentManager(); Fragment frag = fm.findFragmentByTag("ContentFrag"); if (frag != nul
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语句
谢谢您可以使您的
片段
实现一个可刷新的界面,您可以检查它
if(frag instanceof Refreshable)
((Refreshable)frag).refresh();
}
这并不漂亮,但比上面的代码更漂亮。您可以使用instanceof关键字查看片段是否是这些特殊片段之一的实例。这种方法是否只存在于某些片段中?是您自己创建的还是API的一部分
如果是您自己制作的,则让这些片段实现一个名为RefreshableFragment的接口。此接口将包含所述方法,那么您只需执行以下操作:
if(frag!=null && frag instanceof RefreshableFragment)
frag.refresh();
解决方案是创建名为RefreshableFragment的父类,该类具有refresh()方法:
所有片段类都应扩展该类:
public class ExampleFragment1 extends RefreshableFragment {
public void refresh() {
// implementation
}
}
然后,您可以在代码中使用刷新的片段:
FragmentManager fm = getSupportFragmentManager();
RefreshableFragment frag = (RefreshableFragment)fm.findFragmentByTag("ContentFrag");
if (frag != null) {
frag.refresh();
}
英雄所见略同:P看到你的回答让我意识到我忘记了演员阵容!主要的问题是,你不能用android框架进行推理,作为最后的手段,你必须做这样丑陋的事情。这就像是Canvas
“drawLine
方法,与大多数时候都有moveTo
和lineTo
方法的向量绘图库相比,这种方法是不合理的。Fragment
是一个类而不是一个接口。我对你的一篇评论说,我所做的与我们的回答几乎相同时间…哦,我明白了。我没有注意到:)
FragmentManager fm = getSupportFragmentManager();
RefreshableFragment frag = (RefreshableFragment)fm.findFragmentByTag("ContentFrag");
if (frag != null) {
frag.refresh();
}