RecyclerView 选择列表中的每第 8 个项目。怎么能阻止呢?
RecyclerView choose every 8th item in list. How can stop it?
我的项目中有一个recyclerView
。另外,我从第三个图书馆添加了 expandableLayout
。当单击layout
时它有cardView
,它toggle
expandable layout
。但是,例如,如果单击第 1 个 item
,它会在第 1 个 item
之后按顺序每第 8 个 item
toggle
。如何解决它并停止 toggle
其他 items
?
public class BusAdapter extends RecyclerView.Adapter<BusAdapter.ViewHolder> {
private Context context;
private List<Bus> busList;
private static String phoneNumber;
private static final int PERMISSION_CODE = 101;
private RecyclerView recyclerView;
private Locale trlocale;
VoyageAdapterToResultActivityListener voyageAdapterToResultActivityListener;
public BusAdapter(Context _context, List<Bus> _busList, RecyclerView recyclerView) {
this.context = _context;
this.busList = _busList;
this.recyclerView = recyclerView;
this.trlocale = new Locale("tr-TR");
voyageAdapterToResultActivityListener = (VoyageAdapterToResultActivityListener) context;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvPrice, text_seat;
private ImageView imgLogo;
private ConstraintLayout relativeL_row_voyage_view;
private CardView cardV_row_voyage;
ExpandableLayout expandable_layout;
ProgressBar progressB_dialog_seat;
private ViewHolder(View view) {
super(view);view.findViewById(R.id.relative_seat);
expandable_layout = view.findViewById(R.id.expandable_layout);
progressB_dialog_seat = view.findViewById(R.id.progressB_dialog_seat);
relativeL_row_voyage_view = view.findViewById(R.id.relativeL_row_voyage_view);
relativeL_row_voyage_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
expandable_layout.toggle();
progressB_dialog_seat.setVisibility(View.VISIBLE);
final Handler h = new Handler() {
@Override
public void handleMessage(Message message) {
progressB_dialog_seat.setVisibility(View.INVISIBLE);
}
};
h.sendMessageDelayed(new Message(), 5000);
}
});
尝试为您的数据集添加一个布尔字段 "isExpanded" 到 class 总线。在适配器的 onBindViewHolder 中,根据数据的 isExpanded 标志设置 UI。当单击总线项时,将其 isExpanded 设置为 true 或 false 或 !isExpanded 根据需要,然后使适配器 notifyDataSetChanged()。
尝试:
修改您的对象 class,添加以下标志。
public class Bus {
...
boolean isExpanded;
boolean isShowProgress;
public boolean isExpanded() {
return this.isExpanded;
}
public void setExpanded(boolean expanded) {
this.isExpanded = expanded;
}
public boolean isShowProgress() {
return this.isShowProgress;
}
public void setShowProgress(boolean showProgress) {
this.isShowProgress = showProgress;
}
}
在您的适配器中:
public class BusAdapter extends RecyclerView.Adapter<BusAdapter.ViewHolder> {
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvPrice, text_seat;
private ImageView imgLogo;
private ConstraintLayout relativeL_row_voyage_view;
private CardView cardV_row_voyage;
ExpandableLayout expandable_layout;
ProgressBar progressB_dialog_seat;
private ViewHolder(View view) {
super(view);
view.findViewById(R.id.relative_seat);
expandable_layout = view.findViewById(R.id.expandable_layout);
progressB_dialog_seat = view.findViewById(R.id.progressB_dialog_seat);
relativeL_row_voyage_view = view.findViewById(R.id.relativeL_row_voyage_view);
}
}
public void onBindViewHolder(ViewHolder holder, int i) {
Bus bus = busList.get(i);
if (bus.isExpanded()) {
holder.expandable_layout.expand();
} else {
holder.expandable_layout.collapse();
}
holder.progressB_dialog_seat.setVisibility(bus.isShowProgress() ? View.VISIBLE : View.INVISIBLE);
holder.relativeL_row_voyage_view.setOnClickListener(new View.OnClickListener() {
bus.setExpanded(!bus.isExpanded());
bus.setShowProgress(true);
notifyDataSetChanged();
final Handler h = new Handler() {
@Override
public void handleMessage(Message message) {
bus.setShowProgress(false);
notifyDataSetChanged();
}
};
h.sendMessageDelayed(new Message(), 5000);
});
...
}
}
我的项目中有一个recyclerView
。另外,我从第三个图书馆添加了 expandableLayout
。当单击layout
时它有cardView
,它toggle
expandable layout
。但是,例如,如果单击第 1 个 item
,它会在第 1 个 item
之后按顺序每第 8 个 item
toggle
。如何解决它并停止 toggle
其他 items
?
public class BusAdapter extends RecyclerView.Adapter<BusAdapter.ViewHolder> {
private Context context;
private List<Bus> busList;
private static String phoneNumber;
private static final int PERMISSION_CODE = 101;
private RecyclerView recyclerView;
private Locale trlocale;
VoyageAdapterToResultActivityListener voyageAdapterToResultActivityListener;
public BusAdapter(Context _context, List<Bus> _busList, RecyclerView recyclerView) {
this.context = _context;
this.busList = _busList;
this.recyclerView = recyclerView;
this.trlocale = new Locale("tr-TR");
voyageAdapterToResultActivityListener = (VoyageAdapterToResultActivityListener) context;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvPrice, text_seat;
private ImageView imgLogo;
private ConstraintLayout relativeL_row_voyage_view;
private CardView cardV_row_voyage;
ExpandableLayout expandable_layout;
ProgressBar progressB_dialog_seat;
private ViewHolder(View view) {
super(view);view.findViewById(R.id.relative_seat);
expandable_layout = view.findViewById(R.id.expandable_layout);
progressB_dialog_seat = view.findViewById(R.id.progressB_dialog_seat);
relativeL_row_voyage_view = view.findViewById(R.id.relativeL_row_voyage_view);
relativeL_row_voyage_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
expandable_layout.toggle();
progressB_dialog_seat.setVisibility(View.VISIBLE);
final Handler h = new Handler() {
@Override
public void handleMessage(Message message) {
progressB_dialog_seat.setVisibility(View.INVISIBLE);
}
};
h.sendMessageDelayed(new Message(), 5000);
}
});
尝试为您的数据集添加一个布尔字段 "isExpanded" 到 class 总线。在适配器的 onBindViewHolder 中,根据数据的 isExpanded 标志设置 UI。当单击总线项时,将其 isExpanded 设置为 true 或 false 或 !isExpanded 根据需要,然后使适配器 notifyDataSetChanged()。
尝试:
修改您的对象 class,添加以下标志。
public class Bus {
...
boolean isExpanded;
boolean isShowProgress;
public boolean isExpanded() {
return this.isExpanded;
}
public void setExpanded(boolean expanded) {
this.isExpanded = expanded;
}
public boolean isShowProgress() {
return this.isShowProgress;
}
public void setShowProgress(boolean showProgress) {
this.isShowProgress = showProgress;
}
}
在您的适配器中:
public class BusAdapter extends RecyclerView.Adapter<BusAdapter.ViewHolder> {
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvPrice, text_seat;
private ImageView imgLogo;
private ConstraintLayout relativeL_row_voyage_view;
private CardView cardV_row_voyage;
ExpandableLayout expandable_layout;
ProgressBar progressB_dialog_seat;
private ViewHolder(View view) {
super(view);
view.findViewById(R.id.relative_seat);
expandable_layout = view.findViewById(R.id.expandable_layout);
progressB_dialog_seat = view.findViewById(R.id.progressB_dialog_seat);
relativeL_row_voyage_view = view.findViewById(R.id.relativeL_row_voyage_view);
}
}
public void onBindViewHolder(ViewHolder holder, int i) {
Bus bus = busList.get(i);
if (bus.isExpanded()) {
holder.expandable_layout.expand();
} else {
holder.expandable_layout.collapse();
}
holder.progressB_dialog_seat.setVisibility(bus.isShowProgress() ? View.VISIBLE : View.INVISIBLE);
holder.relativeL_row_voyage_view.setOnClickListener(new View.OnClickListener() {
bus.setExpanded(!bus.isExpanded());
bus.setShowProgress(true);
notifyDataSetChanged();
final Handler h = new Handler() {
@Override
public void handleMessage(Message message) {
bus.setShowProgress(false);
notifyDataSetChanged();
}
};
h.sendMessageDelayed(new Message(), 5000);
});
...
}
}