0

我不想硬连线类名并使用instanceOf但动态识别类

可以说我有

// add fragments
mFragments = new ArrayList<Fragment>();
mFragments.add(Fragment.instantiate(this, class1.class.getName()));
mFragments.add(Fragment.instantiate(this, class2.class.getName()));

public class class1 extends SherlockListFragment{
   public static final String TAG = "class1";
}

所有类都有extendsSherlockActivity 或 SherlockListFragment,因此它们有一个共同的基类Fragment。我现在如何在通过数组进行迭代时获取例如static标签或其他可以在Class不使用instanceOf. 我有一些想法,但想获得一些意见,以便我可以学习

 public static final String TAG = "class1"
4

2 回答 2

2

在返回标签的基类中添加一个方法。然后遍历您的结构并获取每个子类型的标签。

public class SherlockListFragment{
    public String getTag(){ 
        return TAG;
    }
}

您不需要确定类的确切子类型。每当您开始遇到此类奇怪的问题时,我建议您先重新设计设计,而不是寻找解决方法。

于 2013-08-22T14:44:25.713 回答
1

在你的Fragment类中有一个方法如下:

public class Fragment {
    ...
    public String getTag() {
       return this.getClass().getCanonicalName();
    }
}

public class Fragment1 extends Fragment {
   ...
}

public class Fragment2 extends Fragment {
   ...
}

现在,我使用下面的简单代码对其进行了测试:

Fragment f = new Fragment1();
Fragment f1 = new Fragment2();

System.out.println(f.getTag());
System.out.println(f1.getTag());

这给出了输出:

Fragment1
Fragment2
于 2013-08-22T14:52:02.003 回答