Android 在同一适配器中填充不同类型的arraylist

Android 在同一适配器中填充不同类型的arraylist,android,android-recyclerview,Android,Android Recyclerview,我正在使用RecyclerView,在3个活动中,RecyclerView的适配器和XML是相同的。问题出在getItemCount()中,因为同一适配器中填充了3种不同类型的ArrayList 如何将不同类型的ArrayList与同一适配器一起使用?我建议您构建一个由您创建的3个ArrayList扩展实现的接口,该接口包含回收器适配器所需的方法。我建议您构建一个由您创建的3个ArrayList扩展实现的接口其中包含回收器适配器所需的方法。首先需要创建3个Getter Setter。例如 Mod

我正在使用
RecyclerView
,在3个活动中,
RecyclerView
的适配器和XML是相同的。问题出在
getItemCount()
中,因为同一适配器中填充了3种不同类型的
ArrayList


如何将不同类型的
ArrayList
与同一适配器一起使用?

我建议您构建一个由您创建的3个ArrayList扩展实现的接口,该接口包含回收器适配器所需的方法。

我建议您构建一个由您创建的3个ArrayList扩展实现的接口其中包含回收器适配器所需的方法。

首先需要创建3个Getter Setter。例如
ModelA
ModelB
ModelC

现在创建一个接受任何类型类对象的
Object
数组列表。e、 g

ArrayList<Object> objectList = new ArrayList<>();

这对您很有用,因为所有视图都有相同的布局,否则您必须使用
视图类型

首先需要创建3个Getter Setter。例如
ModelA
ModelB
ModelC

现在创建一个接受任何类型类对象的
Object
数组列表。e、 g

ArrayList<Object> objectList = new ArrayList<>();

这对您很有用,因为您对所有视图都有相同的布局,否则您必须使用
ViewTypes

此适配器类实现可以让您了解您想要实现的目标

class GenericAdapter extends RecyclerView.Adapter<GenericAdapter.ViewHolder> {

    private List<?> data;

    GenericAdapter(List<?> data) {
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ...
        ...
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bindData(data.get(position));
    }

    @Override
    public int getItemCount() {
        return data.size();
    }


    class ViewHolder extends RecyclerView.ViewHolder {

        ...
        ...

        ViewHolder(View itemView) {
            super(itemView);
            // bind the view references
            ...
            ...
        }


        void bindData(Object data) {
            if (data instanceof Model1) {
                // bind data for model class 1
                ...
                ...
            } else if (data instanceof Model2) {
                // bind data for model class 2
                ...
                ...
            } else if (data instanceof Model3) {
                // bind data for model class 3
                ...
                ...
            }
        }
    }

}
类GenericaAdapter扩展了RecyclerView.Adapter{
私人名单数据;
通用适配器(列表数据){
这个数据=数据;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
...
...
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.bindData(data.get(position));
}
@凌驾
public int getItemCount(){
返回data.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
...
...
ViewHolder(视图项视图){
超级(项目视图);
//绑定视图引用
...
...
}
void bindData(对象数据){
if(模型1的数据实例){
//绑定模型类1的数据
...
...
}else if(Model2的数据实例){
//绑定模型类2的数据
...
...
}else if(Model3的数据实例){
//绑定模型类3的数据
...
...
}
}
}
}

此适配器类实现可以让您了解想要实现的目标

class GenericAdapter extends RecyclerView.Adapter<GenericAdapter.ViewHolder> {

    private List<?> data;

    GenericAdapter(List<?> data) {
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ...
        ...
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bindData(data.get(position));
    }

    @Override
    public int getItemCount() {
        return data.size();
    }


    class ViewHolder extends RecyclerView.ViewHolder {

        ...
        ...

        ViewHolder(View itemView) {
            super(itemView);
            // bind the view references
            ...
            ...
        }


        void bindData(Object data) {
            if (data instanceof Model1) {
                // bind data for model class 1
                ...
                ...
            } else if (data instanceof Model2) {
                // bind data for model class 2
                ...
                ...
            } else if (data instanceof Model3) {
                // bind data for model class 3
                ...
                ...
            }
        }
    }

}
类GenericaAdapter扩展了RecyclerView.Adapter{
私人名单数据;
通用适配器(列表数据){
这个数据=数据;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
...
...
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.bindData(data.get(position));
}
@凌驾
public int getItemCount(){
返回data.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
...
...
ViewHolder(视图项视图){
超级(项目视图);
//绑定视图引用
...
...
}
void bindData(对象数据){
if(模型1的数据实例){
//绑定模型类1的数据
...
...
}else if(Model2的数据实例){
//绑定模型类2的数据
...
...
}else if(Model3的数据实例){
//绑定模型类3的数据
...
...
}
}
}
}

getItemCount()的问题是什么?
请进一步解释您的问题并提供一些代码。3种不同类型的ArrayList是什么意思?其中包含的对象是每个对象的不同类的实例吗?检查这是否有帮助。我的意思是说我有3个不同的模型类每个arraylist都是特定的模型类类型(泛型)。getItemCount()
有什么问题吗?请进一步解释一下您的问题并提供一些代码。3个不同类型的arraylist是什么意思?其中包含的对象是每个对象的不同类的实例吗?我的意思是说我有3个不同的模型类,每个arraylist都是特定的模型类类型(泛型)。