我正在使用RecyclerView
,适配器和XML在3个活动中与RecyclerView
相同。问题出在getItemCount()
,因为在同一个适配器中填充了3种不同类型的ArrayList
。
如何在同一个适配器上使用不同类型的ArrayList
?
答案 0 :(得分:1)
此适配器类实现可以让您了解要实现的目标
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
...
...
}
}
}
}
答案 1 :(得分:0)
我建议您构建一个接口,该接口由您创建的3个ArrayList扩展实现,并包含Recycler适配器所需的方法。
答案 2 :(得分:0)
首先你需要创建3个Getter-Setter。例如
ModelA
,ModelB
,ModelC
现在创建一个Object
的arraylist,它接受任何类型的类对象。例如
ArrayList<Object> objectList = new ArrayList<>();
现在,您需要objectList
添加模型objectList.add(modelA);
这里modelA
是ModelA
类的对象。
现在您必须在适配器中使用此objectList
,然后主要部分来了,您必须在适配器的onBindViewHolder
方法中创建条件。像这样,
if(objectList.get(position) instanceof ModelA){
//TODo your ModelA operations
}else if (objectList.get(position) instanceof ModelB){
//TODo your ModelB operations
}else if (objectList.get(position) instanceof ModelC){
//TODo your ModelC operations
}
这对你有用,因为你有相同的布局,否则你必须使用ViewTypes