【问题标题】:Change color of to recycler view items from the on item click callback function in activity从活动中的项目单击回调函数更改回收站视图项目的颜色
【发布时间】:2019-01-09 16:37:30
【问题描述】:

从活动中更改 RecyclerView 项目颜色。

我已经通过实现适配器回调接口来处理回收器视图项的点击。我还将adapterPosition传递给活动中的回调函数以进行条件检查。

MyActivitiy 类

@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 然后为 recyclerview 项设置新颜色 在 itemPosition 位置,或者如果可能,使该项目不可点击

【问题讨论】:

    标签: android callback android-recyclerview


    【解决方案1】:

    要更改所选行的颜色,请在类级别的适配器int selectedPosition;onBindViewHolder() 方法中定义一个变量:

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

    编辑:

    如果您想在一个活动中比较两个回收站视图选定的位置,请在您的适配器中添加此方法:

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

    在您的活动中通过回调获得selectedPostition 并检查您的条件调用adapter.setSelected(position)

    【讨论】:

    • 我需要比较活动中两个回收器视图的 selectedPosition,因此我必须从我的活动方法 sideAClicked() 更改颜色,而不是从适配器的 onBindViewHolder() 更改颜色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多