Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 适配器中的两个视图保持架_Android_Android Recyclerview_Android Viewholder - Fatal编程技术网

Android 适配器中的两个视图保持架

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_

我解析了XML并从两个API获取数据

到达
表示公共汽车站,
位置
表示行驶公共汽车的位置

问题是添加的
视图数与总线数一样多(即
位置信息数组列表大小
)。 (图中有七辆公共汽车。)

视图的数量是否与返回的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()数量相同?
-是。你想修什么?