我想在同一个回收器视图中加载来自两个不同API的响应,但第一个API中的第一个项目和第二个项目中的第一个项目再次相同,第三个项目中的第四个项目和第二个API中的第二个项目相同,如下所示。
第一个应用程序接口中的两个项目,第二个应用程序接口中的一个项目,我想要加载到recylerview
中。我什么都不知道。请帮帮我。我知道简单地将两个API响应加载到recylerview
中是很简单的,
如果我们全局声明ArrayList意味着我们可以添加两个响应,但是这个场景是不同的。请给出一些想法。
发布于 2018-07-27 08:56:59
我想解决你问题的最好方法是为你的RecyclerView建立一个模型。因此,通过这种方式,您可以创建单个列表项,然后将其提供给适配器。然后使用一个类型(或类似的东西)来决定在回收器视图中显示哪种类型。
由于您没有提供任何代码,因此我将从我的头顶提供一个示例!:
回收器视图模型:
public class RecyclerViewModel{
public static final int RESPONSE_ONE_ITEM_TYPE = 1;
public static final int RESPONSE_TWO_ITEM_TYPE = 2;
private final ResponseModel1 item1;
private final ResponseModel2 item2;
private final int type;
//remember to pass only one item and keep the other one null
public RecyclerViewModel(ResponseModel1 item1, ResponseModel2 item2, int type) {
this.item1 = item1;
this.item2 = item2;
this.type = type;
}
public ResponseModel1 getItem1() {
return item1;
}
public ResponseModel2 getItem2() {
return item2;
}
public int getType() {
return type;
}
}
回收器视图更新程序看起来应该类似于:
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private final List<RecyclerViewModel> items;
public Adapter(List<RecyclerViewModel> items) {
this.items = items;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == RecyclerViewModel.RESPONSE_ONE_ITEM_TYPE)
return new ApiResponse1ViewHolder();
else {
return new ApiResponse2ViewHolder();
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (getItemViewType(position) == RecyclerViewModel.RESPONSE_ONE_ITEM_TYPE){
//bind the api response one item view holder
items.get(position).item1
}else{
//bind the api response two item view holder
items.get(position).item2
}
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public int getItemViewType(int position) {
return items.get(position).type;
}
}
希望它能帮上忙!
发布于 2018-07-27 17:18:35
创建一个具有两个ArrayList的DataAll类。
DataAll{
ArrayList<dataType> data1;
ArrayList<dataType> data2;
Public dataType getDataAtPos1(int pos){
return data1.get(pos);
}
public dataType getDataAtPos2(int pos){
return data2.get(pos);
}
public int getSize(){
return data2.size()+data1.size();
}
}
我把更多的事情留给你。现在,在您的RecyclerView适配器内部有一个存储数据的DataAll对象,并在onBindViewHolder方法中执行以下操作:
onBindViewHolder(MyViewHolder holder, int position){
dataType currentData;
if(position+1 %3 == 0){
currentData = dataAll.getDataAtPos2((position+1)/3 - 1);
}
else{
currentData = dataAll.getDataAtPos1(position - (position/3));
}
}
现在使用currentData填充您的ui。对任何进一步查询的注释。
https://stackoverflow.com/questions/51553802
复制相似问题