مشکل عجیب در ریسایکلرویو

پرسیده شده
فعالیت 1408 روز پیش
دیده شده 1153 بار
0

سلام خسته نباشید
یه ریسایکلر دارم که میخوام وقتی روی ایتم هاش کلیک شد به نوعی اون ایتم هیلایت بشه
این کارو زمانی که روی itemView کلیک میشه انجام دادم
مشکل اینجاست وقتی روی یه ایتم کلیک میشه و اون هایلایت میشه پنج شیش تا ایتم جلو تر هم هایلایت میشه!
البته من پوزیشن اخرین ایتمی که کلیک شده رو نگه میدارم تا وقتی رو بعدی کلیک شد این یکی رو برگردونم حالت قبلی
کسی تاحالا به همچین مشکلی خورده؟

فایل پیوست

0
حذف شده

سلام

کدهای مربوطه رو بفرستید

فایل پیوست

Hamed Hardani

توسط

Hamed Hardani

8 تیر 99

حذف شده
چون یخورده زیاده تو قالب فایل میفرستم پیشاپیش ممنون بابت وقتی که بره خوندش میذارید :)
حذف شده
دوست عزیز داخل کامنتای همین تایپیک گذاشتمش
0
حذف شده
package com.skyidoo.view.service_passenger;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.card.MaterialCardView;
import com.mohamadamin.persianmaterialdatetimepicker.utils.PersianCalendar;
import com.skyidoo.R;
import com.skyidoo.model.classes.ScheduleItem;
import com.skyidoo.utils.TimeUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ServicePassengerDatePickerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<ScheduleItem> scheduleItems = new ArrayList<>();
    private List<String> daysOfWeek;
    List<String> dates;
    private OnDateClickCallBack clickCallBack;
    private static final int VIEW_HOLDER = 1001;
    private static final int VIEW_HOLDER2 = 1002;
    private static int lastPosition = 1000;

    public ServicePassengerDatePickerAdapter(List<ScheduleItem> schedules, OnDateClickCallBack clickCallBack) {
        for (int i = 0; i < 7; i++) {
            scheduleItems.add(schedules.get(i));
            scheduleItems.add(schedules.get(i));
        }
        daysOfWeek = TimeUtil.getSortedDays();
        this.dates = getSortedDates();
        this.clickCallBack = clickCallBack;
    }

    private List<String> getSortedDates() {
        List<String> dates = new ArrayList<>();
        Date today = new Date();
        for (int i = 0; i < 7; i++) {
            PersianCalendar pCalendar = new PersianCalendar();
            Date date = new Date(today.getTime() + (1000 * 60 * 60 * 24 * i));
            pCalendar.setTime(date);
            dates.add(pCalendar.getPersianShortDate());
            dates.add(pCalendar.getPersianShortDate());
        }
        return dates;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                if (viewType == VIEW_HOLDER){
            return new ServicePassengerDatePickerViewHolder(LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_sp_date_picker, parent, false));
        } else
            return new ServicePassengerDatePickerViewHolderBlue(LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_sp_date_picker_blue_mode, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        holder.setIsRecyclable(false);
        if (position % 2 == 0)
            ((ServicePassengerDatePickerViewHolder) holder).bindItem(scheduleItems.get(position), position);
        else
            ((ServicePassengerDatePickerViewHolderBlue) holder).bindItem(scheduleItems.get(position), position);
    }


    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0)
            return VIEW_HOLDER;
        else
            return VIEW_HOLDER2;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return 14;
    }

    public class ServicePassengerDatePickerViewHolder extends RecyclerView.ViewHolder {
        private MaterialCardView cardView;
        private TextView tvDay;
        private TextView tvDate;
        private ImageView ivFrom;
        private TextView tvFrom;
        private ImageView ivTo;
        private TextView tvTo;

        public ServicePassengerDatePickerViewHolder(@NonNull View itemView) {
            super(itemView);
            cardView = itemView.findViewById(R.id.cv_isp_root);
            tvDay = itemView.findViewById(R.id.tv_isp_day);
            tvDate = itemView.findViewById(R.id.tv_isp_date);
            ivFrom = itemView.findViewById(R.id.iv_isp_from);
            tvFrom = itemView.findViewById(R.id.tv_isp_from);
            ivTo = itemView.findViewById(R.id.iv_isp_to);
            tvTo = itemView.findViewById(R.id.tv_isp_to);
        }

        public void bindItem(ScheduleItem item, int p) {
            tvDay.setText(daysOfWeek.get(p));
            tvDate.setText(dates.get(p));
            if (p % 2 != 0) {

                ivFrom.setImageResource(R.drawable.ic_work_primary);
                tvFrom.setText(R.string.work);
                ivTo.setImageResource(R.drawable.ic_home_primary);
                tvTo.setText(R.string.home);
            }
            itemView.setOnClickListener(v -> {
                scheduleItems.get(p).setSelected(true);
                if (lastPosition != 1000)
                scheduleItems.get(lastPosition).setSelected(false);
                notifyItemChanged(p , scheduleItems.get(p));
                cardView.setStrokeColor(itemView.getResources().getColor(R.color.color_gold));
                cardView.setStrokeWidth(4);
                clickCallBack.onClickCallBack(item, p, daysOfWeek.get(p), dates.get(p));
                lastPosition = p;
            });
        }
    }

    public class ServicePassengerDatePickerViewHolderBlue extends RecyclerView.ViewHolder {
        private MaterialCardView cardView;
        private TextView tvDay;
        private TextView tvDate;
        private ImageView ivFrom;
        private TextView tvFrom;
        private ImageView ivTo;
        private TextView tvTo;

        public ServicePassengerDatePickerViewHolderBlue(@NonNull View itemView) {
            super(itemView);
            cardView = itemView.findViewById(R.id.cv_isp_root);
            tvDay = itemView.findViewById(R.id.tv_isp_day);
            tvDate = itemView.findViewById(R.id.tv_isp_date);
            ivFrom = itemView.findViewById(R.id.iv_isp_from);
            tvFrom = itemView.findViewById(R.id.tv_isp_from);
            ivTo = itemView.findViewById(R.id.iv_isp_to);
            tvTo = itemView.findViewById(R.id.tv_isp_to);
        }

        public void bindItem(ScheduleItem item, int p) {
            tvDay.setText(daysOfWeek.get(p));
            tvDate.setText(dates.get(p));
            if (p % 2 != 0) {
                ivFrom.setImageResource(R.drawable.ic_work_primary_white);
                tvFrom.setText(R.string.work);
                ivTo.setImageResource(R.drawable.ic_home_primary_white);
                tvTo.setText(R.string.home);
            }
            itemView.setOnClickListener(v -> {
                scheduleItems.get(p).setSelected(true);
                if (lastPosition != 1000)
                scheduleItems.get(lastPosition).setSelected(false);
                notifyItemChanged(p , scheduleItems.get(p));
                cardView.setStrokeColor(itemView.getResources().getColor(R.color.color_gold));
                cardView.setStrokeWidth(4);
                clickCallBack.onClickCallBack(item, p, daysOfWeek.get(p), dates.get(p));
                lastPosition = p;
            });
        }
    }
}

 

فایل پیوست

محمد باقر ملایی

توسط

محمد باقر ملایی

8 تیر 99