通过在RecyclerView中单击ParentItem来填充ChildItem

时间:2018-08-14 05:29:09

标签: android android-recyclerview

我有一个recyclerView,其中包含车辆数据列表,列表中每个项目的onClick都需要扩展,并使用从服务器获取的数据来填充子项目。我正在按照this教程来实现可扩展的recyclerView,但是现在面临的问题是如何从父项的服务器onClick填充childItems。在示例代码中,所有数据都进行了硬编码,我尝试用Google搜索它,但无法获得任何可行的解决方案。

这是我的ParentViewHolder:

public class VehicleGenreViewHolder extends GroupViewHolder{
    private TextView day;
    private TextView date;
    private TextView distance;
    private TextView speed;
    private TextView incidents;
    private ImageView arrow;

    public VehicleGenreViewHolder(View itemView) {
        super(itemView);
        day = itemView.findViewById(R.id.Day);
        date = itemView.findViewById(R.id.Date);
        distance = itemView.findViewById(R.id.Distance);
        speed = itemView.findViewById(R.id.Speed);
        incidents = itemView.findViewById(R.id.Incidents);
        arrow = itemView.findViewById(R.id.dropDown);
    }

    public void setDay(String value) {
        day.setText(value);
    }

    public void setDate(String value) {
        date.setText(value);
    }

    public void setDistance(String value) {
        distance.setText(value);
    }

    public void setSpeed(String value) {
        speed.setText(value);
    }

    public void setIncidents(String value) {
        incidents.setText(value);
    }

    @Override
    public void expand() {
        animateExpand();
    }

    @Override
    public void collapse() {
        animateCollapse();
    }

    private void animateExpand() {
        RotateAnimation rotate =
                new RotateAnimation(360, 180, RELATIVE_TO_SELF, 0.5f, RELATIVE_TO_SELF, 0.5f);
        rotate.setDuration(300);
        rotate.setFillAfter(true);
        arrow.setAnimation(rotate);
    }

    private void animateCollapse() {
        RotateAnimation rotate =
                new RotateAnimation(180, 360, RELATIVE_TO_SELF, 0.5f, RELATIVE_TO_SELF, 0.5f);
        rotate.setDuration(300);
        rotate.setFillAfter(true);
        arrow.setAnimation(rotate);
    }
}

ChildViewHolder:

public class VehicleGenreDetailViewHolder extends ChildViewHolder{
    private TextView vehicleStatus;
    private TextView vehicleTime;
    private TextView vehicleAddress;

    public VehicleGenreDetailViewHolder(View itemView) {
        super(itemView);
        vehicleStatus = itemView.findViewById(R.id.vehicleStatus);
        vehicleTime = itemView.findViewById(R.id.vehicleTime);
        vehicleAddress = itemView.findViewById(R.id.vehicleAddress);
    }

    public void setVehicleDetailsData(int index,ArrayList<VehicleHistoryDetails> mHistoryDetails){
        vehicleStatus.setText(mHistoryDetails.get(index).getDuration());


    }
}

适配器:

  public class VehicleGenreAdapter extends ExpandableRecyclerViewAdapter<VehicleGenreViewHolder,VehicleGenreDetailViewHolder>{
        public VehicleGenreAdapter(List<? extends ExpandableGroup> groups) {
            super(groups);
        }

        @Override
        public VehicleGenreViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
            View view = (ViewGroup) LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_vehicle_history_list, parent, false);
            return new VehicleGenreViewHolder(view);
        }

        @Override
        public VehicleGenreDetailViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
            ViewGroup v = (ViewGroup) LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_vehicle_history_dropdown, parent, false);
            return new VehicleGenreDetailViewHolder(v);
        }

        @Override
        public void onBindChildViewHolder(VehicleGenreDetailViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {

        }

        @Override
        public void onBindGroupViewHolder(VehicleGenreViewHolder holder, int flatPosition, ExpandableGroup group) {
            final VehicleHistory vehicleItem = new Gson().fromJson(group.getTitle(),VehicleHistory.class);
            holder.setDate(CommonUtilities.getDateStringFormatted(vehicleItem.getDate(), AppConstants.FORMAT_EEE_DD_MMM_YYYY));
            holder.setDistance(String.valueOf(String.format("%.1f", calcDistance(vehicleItem.getDistance_travelled()))) + " kms");
            holder.setSpeed(String.valueOf(String.format("%.1f", calcSpeed(vehicleItem.getDistance_travelled(), vehicleItem.getMoving_time()))) + " kmph (avg.)");
            holder.setIncidents(String.valueOf(vehicleItem.getTotal_alert_count()) + " incidents");

        }
}

现在,我想知道如何进行网络调用以填充parentItem点击上的childItem。

0 个答案:

没有答案
相关问题