我有一个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。