假设我有一个抽象类AbstractFragment
,它有一个超类Fragment
:
public abstract class AbstractFragment extends Fragment {
public abstract updateData();
public static <FragmentClass extends AbstractFragment>
ChartClass newInstance(int condition, Class<ChartClass> chartFragmentClass) {
Constructor<ChartClass> c = chartFragmentClass.getConstructor();
ChartClass fragment = c.newInstance();
Bundle args = new Bundle();
args.putInt("key", condition);
fragment.setArguments(args);
return fragment;
}
AbstractFragment
班的两个孩子:
public class FirstChildFragment extends AbstractFragment {
public updateData() {}
}
public class SecondChildFragment extends AbstractFragment {
public updateData() {}
}
在运行时,根据条件,我想根据条件将Fragment对象强制转换为第一个或第二个子节点之一,或者使用抽象类中的静态方法创建子节点的新实例(我已经有这样的静态方法,如下所示:
void onDataLoaded(int condition) {
Fragment fragment = getChildFragmentManager()
.findFragmentById(R.id.fragment_container_dashboard_chart);
Class ChildFragmentClass;
if (condition == 0) ChildFragmentClass = FirstChildFragment.class;
else if (condition == 1) ChildFragmentClass = SecondChildFragment.class;
else throw new RuntimeException("Condition is invalid");
if (fragment.getClass().isInstance(ChildFragmentClass))
((ChildFragmentClass) fragment).updateData();
else {
ChildFragmentClass childFragment = ChildFragmentClass.newInstance(5, ChildFragmentClass);
}
}
上面代码中的问题是我不知道如何正确转换fragment
对象,以便将其识别为ChildFragmentClass
类的实例。随后,这意味着我尝试调用newInstance
的代码也是正确的如何将片段适当地转换为ChildFragmentClass
并能够调用适当的方法?我希望新实例成为第一个或第二个孩子的实例。
答案 0 :(得分:1)
ChildFragmentClass不是一个类,它是一个局部变量。您应该创建一个新变量并分配它。
这可能对您的问题有所帮助。
if (fragment.getClass().isInstance(AbstractFragment))
((AbstractFragment) fragment).updateData();
else {
Fragment childFragment = AbstractFragment.newInstance(5, ChildFragmentClass);
}