我有四个不同的片段类,它们都实例化我的自定义ArrayAdapter的一个实例。他们都需要在ArrayAdapter的构造函数中包含对自己的引用。
我的四个片段类是“FeaturedFragment”,“GeneralInfoFragment”,“VisitingFragment”和“LivingHereFragment”。
为了接受对这些不同类的引用,我目前在ArrayAdapter类中有四个构造函数:
infoViewAdapter(Context context, ArrayList<MordorInfo> list, FeaturedFragment cb) {
super (context, 0, list);
myContext = context;
infoList = list;
featuredCallback = cb;
}
infoViewAdapter(Context context, ArrayList<MordorInfo> list, GeneralInfoFragment cb) {
super (context, 0, list);
myContext = context;
infoList = list;
generalInfoCallback = cb;
}
infoViewAdapter(Context context, ArrayList<MordorInfo> list, LivingHereFragment cb) {
super (context, 0, list);
myContext = context;
infoList = list;
livingHereCallback = cb;
}
infoViewAdapter(Context context, ArrayList<MordorInfo> list, VisitingFragment cb) {
super (context, 0, list);
myContext = context;
infoList = list;
visitingCallback = cb;
}
有没有办法将这些组合成一个构造函数?也许通过在'this'参数的构造函数中接受一个有点泛型的类型?或者可能让所有四个片段扩展到同一个类,这样我可以在调用构造函数时转换this
?
一旦我有了引用,我就用它们在适当的片段中执行一个公共方法:
if (featuredCallback != null) {
featuredCallback.setButtonCallback(currentInfo.gotoRef);
} else if (generalInfoCallback != null) {
generalInfoCallback.setButtonCallback(currentInfo.gotoRef);
} else if (visitingCallback != null) {
visitingCallback.setButtonCallback(currentInfo.gotoRef);
} else if (livingHereCallback != null) {
livingHereCallback.setButtonCallback(currentInfo.gotoRef);
}
我想从单个类引用变量进行调用。
答案 0 :(得分:0)
CallbackInterface callback
,然后将具体实现传递给它:
InfoViewAdapter(Context context, ArrayList<MordorInfo> list, CallbackInterface cb) {
super (context, 0, list);
myContext = context;
infoList = list;
callback = cb;
}
如果您想使用InfoViewAdapter
回调创建GeneralInfoFragment
,只需调用:
GeneralInfoFragment callback = new GeneralInfoFragment();
new InfoViewAdapter(context, list, callback);
通过在CallbackInterface
中定义公共回调方法,您可以在不知道具体实现类(称为后期绑定或多态)的情况下调用它们:
callback.execute();