将"this"传递给来自不同片段的构造函数



>我有四个不同的片段类,它们都实例化了我的自定义 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);
}

我想从单个类引用变量进行调用。

伙计,你做错了。你甚至没有在上一个问题中问我。您不需要在适配器中定义具体的回调类型,只需将其声明为CallbackInterface callback然后将具体的实现传递给它:

InfoViewAdapter(Context context, ArrayList<MordorInfo> list, CallbackInterface cb) {
super (context, 0, list);
myContext = context;
infoList = list;
callback = cb;
}

如果要使用GeneralInfoFragment回调创建InfoViewAdapter,只需调用:

GeneralInfoFragment callback = new GeneralInfoFragment();
new InfoViewAdapter(context, list, callback);

通过在CallbackInterface中定义通用回调方法,您可以在不了解具体实现类(称为后期绑定或多态(的情况下调用它们:

callback.execute();

最新更新