【发布时间】:2018-05-19 07:30:54
【问题描述】:
我有四个不同的片段类,它们都实例化了我的自定义 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);
}
我想从单个类引用变量中进行调用。
【问题讨论】:
-
是 FeaturedFragment、GeneralInfoFragment 等实现/扩展类有通用接口/类
-
它们都扩展了 Fragment 并实现了 View.OnClickListener。而且它们都有
public setButtonCallback(int position),这是ArrayAdapter使用片段引用调用的方法。 -
我猜所有四个片段都可以实例化一个实现
setButtonCallBack()的新类ManageButtons。片段可以在其构造函数中传递需要更新到ManageButtons的TextView,然后将它们对ManageButtons的引用传递给ArrayAdapter 构造函数,而不是每个唯一的片段引用?设置起来有点复杂,但还不错。 -
setButtonCallback(int position)方法是否存在于Fragment或View.OnClickListener上?如果是,是哪一个? -
两者都不存在,我目前在我的四个片段类中都复制了它的实现。
标签: java android-fragments constructor android-arrayadapter