如何判断两个片段是否来自同一类的实例

7
假设我有一个容器内的片段需要用另一个片段替换。
代码非常简单:
getSupportFragmentManager().beginTransaction().
replace(R.id.content_frame,fragmentToAdd).addToBackStack(null).commit();

问题是我希望确认fragmentToAdd和我将要替换的fragment不相似。如果相似,应用程序将什么也不做。所以,我可以获取原始Fragment:
Fragment originalFragment=(Fragment) getSupportFragmentManager().findFragmentById(R.id.content_frame);

最终的代码大致如下:
if (haveDifferentInstance(originalFragment,fragmentToAdd)){
    getSupportFragmentManager().beginTransaction().
    replace(R.id.content_frame,fragmentToAdd).addToBackStack(null).commit();}
else
    // Do nothing

所以,haveDifferentInstance(Fragment fragmentA,Fragment fragmentB)的代码应该是什么?

感谢任何帮助。

编辑

我知道我可以做类似以下的事情:

if (fragmentToAdd instanceof FragmentA)

但是我有FragmentA、FragmentB、... Fragment F,我不想使用每种Fragment的'if'语句。

(意思是作者不想在代码中针对每个Fragment类型写不同的逻辑判断)

为什么不在添加“Fragment”时设置“Tag”参数,然后使用“findFragmentByTag(String tag)”呢? - techi.services
3个回答

17

检查类是否相等:if(origianalFragment.getClass().equals(fragmentToAdd.getClass()))


0

你可以检查简称。

if (fragmentToAdd.class.getSimpleName().equals(originalFragment.getClass().getSimpleName()))
{
...
}

0
在 Kotlin 中,instanceOf 的替代方法是 "is" 运算符。 if (fragmentToAdd instanceof FragmentA) 在 Kotlin 中将被写成如下形式: if (fragmentToAdd is FragmentA) {..}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接