将`this`传递给不同片段的构造函数

时间:2018-05-19 07:30:54

标签: java android-fragments constructor android-arrayadapter

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

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

1 个答案:

答案 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();