我的项目中有一个recyclerView
。另外,我还从第三个库添加了 expandableLayout
。当点击它的cardView
的layout
时,它切换
可扩展布局
。但是,例如,如果单击第一个 item
,它会在第一个 item
之后按顺序每隔 8 个 item
进行一次切换
。如何解决这个问题并停止切换
其他项目
?
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);
}
});
最佳答案
尝试将 boolean 字段“isExpanded”添加到数据集的 Bus 类中。在适配器的 onBindViewHolder 中,根据数据的 isExpanded 标志设置 UI。当单击总线项时,根据需要将其 isExpanded 设置为 true 或 false 或 !isExpanded,然后使适配器notifyDataSetChanged()。
尝试:
修改您的对象类,添加以下标志。
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);
});
...
}
}
关于java - RecyclerView 选择列表中的每 8 个项目。怎么能阻止呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56592794/