我如何查看选定或未选择的不同视图

时间:2017-03-16 23:49:32

标签: android android-recyclerview

我目前使用RecyclerView,但我无法解决问题; 如果用户选择了答案,请回答textview更改颜色和背景。 如果用户选择了不同的答案,请先回答旧的textview颜色和背景。

代码;

    @Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    _mContext = holder._mAnswersContainer.getContext();
    _mPosition = position;
    holder._mImageAnswer.setImageDrawable(Utils.stringToResource(_mContext,
            _mAnswerList.get(_mPosition).mAnswerImage));
    holder._mImageTextAnswer.setText(_mAnswerList.get(_mPosition).mAnswerText);

    holder._mAnswersContainer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder._mImageTextAnswer.setTextColor(_mContext.getResources()
                    .getColor(R.color.white));
            holder._mImageTextAnswer.setBackgroundColor(_mContext.getResources()
                    .getColor(R.color.red));

            Log.d(TAG, "Values : " + QuestionsHelper.getInstance(_mContext)
                    .getValues(_mAnswerList.get(_mPosition).mAnswerText));

        }
    });
}

1 个答案:

答案 0 :(得分:1)

在适配器内部,创建一个成员变量以跟踪选择的位置:

private int mSelected = -1;

onBindViewHolder内(虽然它也可以在onCreateViewHolder内部使用):

int color;
if(position == mSelected){
    color = ContextCompat.getColor(context, R.color.selectedColor);
}else{
    color = ContextCompat.getColor(context, R.color.regularColor);
}

// Set the color
viewHolder.yourView.setBackgroundColor(color);

为RecyclerView适配器创建一些辅助函数来处理选择:

public void selectPosition(int selected){
    mSelected = selected;
    notifyDataSetChanged();
}

public void resetSelected(){
    mSelected = -1;
    notifyDataSetChanged();
}

只要您想要设置所选项目,只需拨打adapter.selectPosition()即可。并使用adapter.resetSelected()

清除选择