2017-03-16 4 views
0

私は現在RecyclerViewを使用していますが、私は問題を解決できません。 ユーザーが回答を選択した場合は、textviewの色と背景の変更で応答します。 ユーザーが異なる回答を最初に選択した場合、古いtextviewの色と背景に答えます。どのようにRecyclerView異なるビュー選択または選択解除

コード。

アダプタ内部
@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

、選択された位置のトラック維持するためにメンバ変数を作る:あなたのonBindViewHolder内部

private int mSelected = -1; 

を(それは同様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()

関連する問題