۲ محمد باقر ملایی
مشکل عجیب در ریسایکلرویو
Hamed Hardani حل شده توسط Hamed Hardani

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

سلام

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

بهترین پاسخ
Hamed Hardani ۰۸ تیر ۱۳۹۹، ۰۷:۵۳
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;
            });
        }
    }
}

 

محمد باقر ملایی ۰۸ تیر ۱۳۹۹، ۰۸:۱۶