Android 适配器中的两个视图保持架
我解析了XML并从两个API获取数据Android 适配器中的两个视图保持架,android,android-recyclerview,android-viewholder,Android,Android Recyclerview,Android Viewholder,我解析了XML并从两个API获取数据 到达表示公共汽车站,位置表示行驶公共汽车的位置 问题是添加的视图数与总线数一样多(即位置信息数组列表大小)。 (图中有七辆公共汽车。) 视图的数量是否与返回的getItemCount()的数量相同 我怎样才能解决这个问题 public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int VIEW_
到达
表示公共汽车站,位置
表示行驶公共汽车的位置
问题是添加的视图数与总线数一样多(即位置信息数组列表大小
)。
(图中有七辆公共汽车。)
视图的数量是否与返回的getItemCount()的数量相同
我怎样才能解决这个问题
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int VIEW_TYPE_ARRIVAL = 0;
private static final int VIEW_TYPE_POSITION = 1;
private ArrayList<ArrivalInfo> arrivalInfoArrayList;
private ArrayList<PositionInfo> positionInfoArrayList;
private int arrivalInfoArrayListSize;
private int positionInfoArrayListSize;
public MyAdapter(ArrayList<ArrivalInfo> arrivalInfoArrayList, ArrayList<PositionInfo> positionInfoArrayList) {
this.arrivalInfoArrayList = arrivalInfoArrayList;
this.positionInfoArrayList = positionInfoArrayList;
arrivalInfoArrayListSize = arrivalInfoArrayList.size();
positionInfoArrayListSize = positionInfoArrayList.size();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.test2, parent, false);
if (viewType == VIEW_TYPE_ARRIVAL) {
return new ArrivalViewHolder(view);
}
if (viewType == VIEW_TYPE_POSITION) {
return new PositionViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ArrivalViewHolder) {
((ArrivalViewHolder) holder).bind(arrivalInfoArrayList.get(position));
}
if (holder instanceof PositionViewHolder) {
((PositionViewHolder)holder).bind(positionInfoArrayList.get(position - arrivalInfoArrayListSize));
}
}
@Override
public int getItemCount() {
return arrivalInfoArrayListSize + positionInfoArrayListSize;
}
@Override
public int getItemViewType(int position){
if(position < arrivalInfoArrayListSize){
return VIEW_TYPE_ARRIVAL;
}
if(position - arrivalInfoArrayListSize < positionInfoArrayListSize){
return VIEW_TYPE_POSITION;
}
return -1;
}
public class ArrivalViewHolder extends RecyclerView.ViewHolder {
private TextView tv_stNm;
private TextView tv_arsId;
public ArrivalViewHolder(View v) {
super(v);
tv_stNm = v.findViewById(R.id.stNm);
tv_arsId = v.findViewById(R.id.arsId);
}
public void bind(ArrivalInfo arrivalInfo) {
tv_arsId.setText(arrivalInfo.getArsId());
tv_stNm.setText(arrivalInfo.getStNm());
}
}
public class PositionViewHolder extends RecyclerView.ViewHolder {
private ImageView iv_bus1;
private ImageView iv_bus2;
public PositionViewHolder(View v) {
super(v);
iv_bus1 = v.findViewById(R.id.busImage1);
iv_bus2 = v.findViewById(R.id.busImage2);
}
public void bind(PositionInfo positionInfo) {
if(positionInfo.getStopFlag().equals("1")) iv_bus1.setVisibility(positionInfo.getSectOrd());
if(positionInfo.getStopFlag().equals("0")) iv_bus2.setVisibility(positionInfo.getSectOrd());
}
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
私有静态最终整数视图\类型\到达=0;
私有静态最终内部视图类型位置=1;
私人ArrayList ArrayList ArrayList;
私有ArrayList位置信息ArrayList;
私有int arrivalInfoArrayListSize;
私有int-positionInfoArrayListSize;
公共MyAdapter(ArrayList ArrayList ArrayList ArrayList、ArrayList positionInfoArrayList){
this.arrivalInfoArrayList=arrivalInfoArrayList;
this.positionInfoArrayList=positionInfoArrayList;
arrivalInfoArrayList size=arrivalInfoArrayList.size();
positionInfoArrayList size=positionInfoArrayList.size();
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.test2,父级,假);
如果(视图类型==视图类型到达){
返回新到达的文件夹(视图);
}
如果(视图类型==视图类型位置){
返回新位置ViewHolder(视图);
}
返回null;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
if(到达文件夹的持有者实例){
((ArrivalViewHolder)holder.bind(arrivalInfoArrayList.get(position));
}
if(支架实例位置视图支架){
((PositionViewHolder)holder.bind(positionInfoArrayList.get(position-arrinfoArrayListSize));
}
}
@凌驾
public int getItemCount(){
返回ArrayListSize+positionInfoArrayListSize;
}
@凌驾
public int getItemViewType(int位置){
if(位置
视图回收器视图创建的数量为
在getItemCount中返回的数字(忽略回收过程)
我从你的问题中了解到你想做这样的事情
巴士到站信息
职位信息
职位信息
巴士到站信息
等
列表将混合到达和位置信息,所以您不能显示到达信息,然后显示位置信息。
如果我的理解是正确的,那么我建议您使用抽象类信息,它将实现Compariable,这样您就可以对数组列表进行排序,并使用方法gettype
在adapter中,您有抽象类的arraylist,您可以以适当的方式使用它,如果您可以将代码添加到github或任何开放源代码平台,我可以进一步帮助您
视图的数量是否与返回的getItemCount()数量相同?
-是。你想修什么?