首先忽略一些文字不在engilsh.Well我试图在按下时改变mi卡的颜色。结果是卡改变了颜色,问题是其他一些卡也会改变颜色。
我正在使用spareBoleanArray - >选择
这是我的适配器:
private class DotesAdapter extends RecyclerView.Adapter<DotesAdapter.DoteViewHolder> implements Filterable {
private ListaDotes mValues;
private DotesAdapter.DoteFilter mFilter;
public DotesAdapter(ListaDotes items){
mValues=items;
mFilter= new DotesAdapter.DoteFilter(DotesAdapter.this);
}
@Override
public DotesAdapter.DoteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
return new DotesAdapter.DoteViewHolder(v);
}
@Override
public void onBindViewHolder(DotesAdapter.DoteViewHolder holder, int position) {
holder.Titulo.setText(mValues.get(position).getTitulo());
String s;
int t = mValues.get(position).getTipo();
if(t==0)
s= "GENERALES";
else
if(t==1)s= "FORTALEZA";
else
if(t==2)s= "REFLEJOS";
else
if(t==3)s= "VOLUNTAD";
else
if(t==4)s= "PRECISIÓN";
else
if(t==5)s= "ATAQUE";
else
s= "SOBRENATURALES";
holder.Tipo.setText(s);
if(selections.get(position,false))
holder.myBackground.setCardBackgroundColor(Color.RED);
}
@Override
public int getItemCount() {
return mValues.size();
}
@Override
public Filter getFilter() {
// if(doteFilter == null)
// doteFilter = new DoteFilter(this, listaDotes);
return mFilter;
}
这是我的ViewHolder:
public class DoteViewHolder extends RecyclerView.ViewHolder {
TextView Titulo;
TextView Tipo;
CardView myBackground;
DotesAdapter adapter;
public DoteViewHolder(final View itemView) {
super(itemView);
Titulo=(TextView) itemView.findViewById(R.id.titulo);
Tipo=(TextView) itemView.findViewById(R.id.tipo);
myBackground =(CardView) itemView.findViewById(R.id.card);
itemView.setLongClickable(true);
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent = new Intent(CrearPersonajeDotes.this,DoteView.class);
//Bundle b = new Bundle();
//b=filteredList.get(getAdapterPosition()).toString();
YoYo.with(Techniques.Flash).duration(200).playOn(v);
intent.putExtra("Dote", getAdapterPosition());
intent.putExtra("Call",1);
startActivity(intent);
return true;
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//HERE I CHANGE THE COLOR OF THE CARD TO RED IF THE POSITION OF THE ARRAYS IS ON TRUE OR BLUE IN THE OTHER CASE
if(!selections.get(getAdapterPosition(),false)) {
myBackground.setCardBackgroundColor(Color.RED);
selections.put(getAdapterPosition(),true);
Dote d = listaDotes.get(getAdapterPosition());
MainCrearPersonaje.NPersonaje.addDote(d);
UpdatePDText();
}
else{
myBackground.setCardBackgroundColor(Color.BLUE);
selections.put(getAdapterPosition(),false);
Dote d = listaDotes.get(getAdapterPosition());
MainCrearPersonaje.NPersonaje.removeDote(d);
UpdatePDText();
;
}
}
});
}
}
答案 0 :(得分:1)
//this line contains a logical error. it will evaluate to false when it
//actually true...remove the ! and it should work fine
if(!selections.get(getAdapterPosition(),false))
答案 1 :(得分:0)
您需要onBindViewHolder()
中的代码来设置颜色。当视图被回收时,它仍然具有上次使用时的颜色,因此在将新数据绑定到颜色时需要正确地重置颜色。
int color = selections.get(position,false) ? Color.RED : Color.BLUE;
holder.myBackground.setBackgroundColor(color);