Измените цвет на просмотр элементов переработки из функции обратного вызова щелчка по элементу в действии - PullRequest
0 голосов
/ 09 января 2019

Изменить цвет элемента RecyclerView от активности.

Я обработал щелчок элемента представления рециркулятора с помощью интерфейса обратного вызова адаптера. Я также передал функцию adaptorPosition функции обратного вызова в действии для проверки моего состояния.

MyActivitiy class

@Override
public void onSideAClicked(List<Faq> dataList, int itemPosition) {
    sideA_ID = dataList.get(itemPosition).getId();
    positionA = itemPosition + 1;
    sideAisClicked = true;
    if (checkIfMatched())
        // Here checkIfMatched() is true then set new color to recyclerview item at position itemPosition or if possible make the item non clickable
}

Класс MyAdapter

public class SideARecyclerViewAdapter extends RecyclerView.Adapter<SideARecyclerViewAdapter.ViewHolder> {

SideAAdapterCallback callback;
private Context context;
private List<Faq> faqList;

public SideARecyclerViewAdapter(Context context, List<Faq> faqList, SideAAdapterCallback sideAAdapterCallback) {
    this.context = context;
    this.faqList = faqList;
    this.callback = sideAAdapterCallback;
}
public interface SideAAdapterCallback {
    void onSideAClicked(List<Faq> dataList, int position);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_list_items, viewGroup,false);
    ViewHolder mh = new ViewHolder(v);
    return mh;
}

@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
    viewHolder.faq_position.setText((i + 1) + "");
    viewHolder.faq_question.setText(faqList.get(i).getQuestion());
}

@Override
public int getItemCount() {
    return (null != faqList ? faqList.size() : 0);
}


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    private TextView faq_position;
    private TextView faq_question;

    public ViewHolder(View view) {
        super(view);

        this.faq_position = (TextView) view.findViewById(R.id.faq_position);
        this.faq_question = (TextView) view.findViewById(R.id.faq_question);

        this.itemView.setClickable(true);
        this.itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int position = getAdapterPosition();

        if (callback != null) {
            callback.onSideAClicked(faqList, position);
        }
    }

}

// Здесь, если checkIfMatched () возвращает true, тогда установить новый цвет для элемента повторного просмотра в позиции itemPosition или, если возможно, сделать элемент не активным

1 Ответ

0 голосов
/ 09 января 2019

Для изменения цвета выбранной строки определите переменную в адаптере int selectedPosition; на уровне класса и в onBindViewHolder() метод do:

if(selectedPosition == i){
   //Change row color
}
else{
   //Set default color
}

Edit:

Если вы хотите сравнить два рециклиста в выбранной позиции в одном упражнении, добавьте этот метод в свои адаптеры:

void setSelected (int position){
  this.selectedPosition = position;
  notifyDataSetChanged();
}

после получения selectedPostition в вашей активности с обратным вызовом и проверьте ваше состояние вызова adapter.setSelected(position)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...