RecyclerViewアイテムのクリック時にRecyclerView CardViewの背景色(緑色)を変更しようとしています。RecyclerViewの次のアイテムをクリックしたときに前のアイテムを変更/元の色(ピンク色)になり、選択された項目の色が緑に変わります。誰かが私にこのための適切な解決策を与えることができます。RecyclerView Cardviewアイテムの背景色の変更
私のクラス - :
public class RecylerAdapter extends RecyclerView.Adapter<RecylerAdapter.ViewHolder>
{ private boolean isSelected;
private final static int FADE_DURATION = 500;// milliseconds
private int lastPosition = -1;
Context cont;
private String[] strname;
private int[] icon;
public RecylerAdapter(Context con, String[] androidNames, int[] androidIcon)
{ cont=con;
strname=androidNames;
icon=androidIcon;
}
class ViewHolder extends RecyclerView.ViewHolder
{ private ImageView imgView;
private TextView txtView;
private CardView cardView;
private SparseBooleanArray selectedItems = new SparseBooleanArray();
public ViewHolder(final View itemView)
{
super(itemView);
imgView = (ImageView) itemView.findViewById(R.id.imageView);
txtView = (TextView) itemView.findViewById(R.id.txt);
cardView = (CardView) itemView.findViewById(R.id.cv12);
itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
cardView.isSelected = !cardView.isSelected;
notifyDataSetChanged();
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout,parent,false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBindViewHolder(ViewHolder holder, int i)
{
if(ViewHolder.isSelected)
{
holder.cardView.setBackground(Color.Green);
}
else{
holder.cardView.setBackground(Color.Pink);
}
holder.txtView.setText(strname[i]);
holder.imgView.setImageResource(icon[i]);
setAnimation(holder.cardView, i);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setAnimation(View viewToAnimate, int position)
{
// If the bound view wasn't previously displayed on screen, it's animated
if (position > lastPosition)
{
//animation 1
AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(FADE_DURATION);
viewToAnimate.startAnimation(anim);
//animation 2
Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
else
{
Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
@Override
public int getItemCount()
{
return strname.length;
}
public void setSelected(boolean selection){
this.isSelected = selection;
}
public boolean isSelected(){
return isSelected;
}
}
はブールまたはは、colorName、およびonclickの項目リスナーチェンジカラー値のようなあなたのモデルクラス内の別のフィールドを追加するバインドビューホルダーでRecyclerView.ViewHolder {
を拡張しますそのアイテムの –
@Divyesh .. 'if(selectedItems.get(getAdapterPosition()、false)){ selectedItems.delete(getAdapterPosition()); cardView.setCardBackgroundColor(Color.GREEN); } else { selectedItems.put(getAdapterPosition()、true); cardView.setCardBackgroundColor(Color.BLUE); } } 'この論理を試しました –
このためには、リストのModelクラスでもう1つブール値を管理する必要があります。下記のreadyandroidの答えを確認してください。 –