【发布时间】:2015-10-21 14:33:08
【问题描述】:
我已将一些用于片段的函数移至基类
protected void changeToFragment(Enum<?> label){
changeToFragment(label, false);
}
protected void changeToFragment(Enum<?> label, boolean addToBackStack){
FragmentManager fragmentManager = getFragmentManager();
if (addToBackStack){
fragmentManager.beginTransaction()
.replace(R.id.container, getFragmentFromLabel(label), label.toString())
.addToBackStack(null)
.commit();
}
else{
fragmentManager.beginTransaction()
.replace(R.id.container, getFragmentFromLabel(label), label.toString())
.commit();
}
}
protected abstract Fragment getFragmentFromLabel(Enum<?> label);
在扩展类中,我定义了一个枚举作为对我的片段的引用
private enum Fragments { FRAG_1,
FRAG_2,
FRAG_3
}
我已经将抽象函数实现为
@Override
protected Fragment getFragmentFromLabel(Fragments label){
switch(label){
case FRAG_1: return getFragment1();
case FRAG_2: return getFragment2();
case FRAG_3: return getFragment3();
}
return null;
}
问题是我有一个错误提示:必须将类 XXX 声明为抽象或在 FragmentBaseActivity 中实现抽象方法 getFragmentFromLabel(Enum label)
为什么 getFragmentFromLabel(Fragments label) 不满足这个要求?
【问题讨论】:
-
将方法签名从
...(Fragments label)更改为...(Enum<?> label)可以解决您的问题吗?然后将枚举转换为您需要的类型? -
是的!它正在处理该更改和此转换开关((片段)标签)谢谢!!,但是......这样方法接受任何类型的枚举,我可以限制儿童类中的方法只接受片段枚举类型?
-
是的,我会回答的
标签: android generics android-fragments enums