RecyclerView выбрать каждый 8-й элемент в списке. Как это можно остановить? - PullRequest
0 голосов
/ 14 июня 2019

В моем проекте есть recyclerView. Также я добавил expandableLayout из третьей библиотеки. Когда клик layout из этого имеет cardView, он toggle expandable layout. Но, например, если я нажимаю 1-й item, он toggle каждые 8-й item по порядку после 1-го item. Как я могу решить это и остановить 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);
                    }
                });

1 Ответ

1 голос
/ 14 июня 2019

Попробуйте добавить логическое поле isExpanded в класс Bus для вашего набора данных. В onBindViewHolder адаптера настройте пользовательский интерфейс в зависимости от флага isExpanded данных. А когда вы щелкаете по элементу шины, установите для его 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);
        });
        ...
    }  
}     
...