java - RecyclerView 选择列表中的每 8 个项目。怎么能阻止呢?

标签 java android android-recyclerview android-cardview

我的项目中有一个recyclerView。另外,我还从第三个库添加了 expandableLayout。当点击它的cardViewlayout时,它切换可扩展布局。但是,例如,如果单击第一个 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/

相关文章:

java - 设置查询参数;参数值与预期类型不匹配

java - 是否可以在 RetryListener 中访问失败方法的参数?

android - 如何将 View 带到 cardview 前面?

android - 改造滚动发光在填充之外

android - Recyclerview 与 Gridlayoutmanager

java - 在注释处理器配置的生成源阶段需要来自 src/main/resources 的文件

缩小窗口时 JavaFX backgroundImage 消失

android - 不同设备的 Admob 横幅尺寸

android - 带有背景图像的慢速应用程序

android - RecyclerView 滚动不流畅