![](/img/trans.png)
[英]Android spinner adapter selecting doesn't work with using custom BaseAdapter
[英]Android Adapter doesn't work when selecting multiple cardviews
我有一個問題,我不明白為什么我的CardViews
產生這種效果。
我需要選擇一個或多個CardViews
但是我的適配器無法正常工作。 我的適配器實現不正確嗎?
我的適配器
public class PersonasAdapter extends RecyclerView.Adapter < PersonasAdapter.PersonasViewHolder > {
private Persona subject;
private List < Persona > personastList;
public PersonasAdapter() {}
public PersonasAdapter(List < Persona > personastList) {
this.personastList = personastList;
}
@Override
public void onBindViewHolder(final PersonasViewHolder personasViewHolder, int i) {
Persona ci = personastList.get(i);
personasViewHolder.txtNombre.setText(ci.getNombre());
personasViewHolder.txtUsuario.setText(ci.getUsuario());
personasViewHolder.txtTwitter.setText(ci.getTwitter());
subject = personastList.get(i);
personasViewHolder.card_view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(v.getContext(), "Eliminar Cardview", Toast.LENGTH_SHORT).show();
personasViewHolder.card_view.setBackgroundResource(R.color.colorPrimary);
return false;
}
});
personasViewHolder.card_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Reproducir", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public PersonasViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_layout_persona, viewGroup, false);
cardView
return new PersonasViewHolder(itemView);
}
靜態類
public static class PersonasViewHolder extends RecyclerView.ViewHolder {
protected TextView txtNombre;
protected TextView txtUsuario;
protected TextView txtTwitter;
protected CardView card_view;
public PersonasViewHolder(View v) {
super(v);
txtNombre = (TextView) v.findViewById(R.id.txtNombre);
txtUsuario = (TextView) v.findViewById(R.id.txtUsuario);
txtTwitter = (TextView) v.findViewById(R.id.txtTwitter);
card_view = (CardView) v.findViewById(R.id.card_view);
}
}
//Metodo que nos retornarta la cantidad de personas en la lista
@Override
public int getItemCount() {
return personastList.size();
}
}
問題如下:
您可以通過將每個Cardview的狀態存儲在數組中,然后為每個位置綁定正確的顏色來解決此問題。 我修改了您的代碼以顯示此想法:
public class PersonasAdapter extends RecyclerView.Adapter < PersonasAdapter.PersonasViewHolder > {
private Persona subject;
private List < Persona > personastList;
private boolean[] selectedPersonas;
public PersonasAdapter() {}
public PersonasAdapter(List < Persona > personastList) {
this.personastList = personastList;
this.selectedPersonas = new boolean[personasList.size()];
for (int i = 0; i < personasList.size(); i++) {
this.selectedPersonas[i] = false;
}
}
@Override
public void onBindViewHolder(final PersonasViewHolder personasViewHolder, final int i) {
Persona ci = personastList.get(i);
personasViewHolder.txtNombre.setText(ci.getNombre());
personasViewHolder.txtUsuario.setText(ci.getUsuario());
personasViewHolder.txtTwitter.setText(ci.getTwitter());
subject = personastList.get(i);
updatePersonaHolderBackground(personaViewHolder, i);
personasViewHolder.card_view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(v.getContext(), "Eliminar Cardview", Toast.LENGTH_SHORT).show();
selectedPersonas[i] = !selectedPersonas[i];
updatePersonaHolderBackground(personaViewHolder, i);
return false;
}
});
personasViewHolder.card_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Reproducir", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public PersonasViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_layout_persona, viewGroup, false);
cardView
return new PersonasViewHolder(itemView);
}
private void updatePersonaHolderBackground(final PersonasViewHolder personasViewHolder, final int i) {
if (selectedPersonas[i]) {
personasViewHolder.card_view.setBackgroundResource(R.color.colorPrimary);
} else {
// TODO: change the color of personasViewHolder back to normal using whatever color you want.
}
}
我解決了我的問題。 問題是卡片視圖的位置。
我聲明全局變量
int globalPosition;
和
personasViewHolder.card_view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(v.getContext(), "Eliminar Cardview", Toast.LENGTH_SHORT).show();
personasViewHolder.card_view.setBackgroundResource(R.color.colorPrimary);
globalPosition=i;
notifyDataSetChanged();
return false;
}
});
和驗證
還有一個onBindViewHolder中的if
if (i == globalPosition) {
personasViewHolder.card_view.setBackgroundResource(R.color.colorPrimary);
} else {
personasViewHolder.card_view.setBackgroundResource(R.color.colorAccent);
}
結果就是這樣。
public class PersonasAdapter extends RecyclerView.Adapter < PersonasAdapter.PersonasViewHolder > {
private Persona subject;
private List < Persona > personastList;
public PersonasAdapter() {}
int globalPosition;
public PersonasAdapter(List < Persona > personastList) {
this.personastList = personastList;
}
@Override
public void onBindViewHolder(final PersonasViewHolder personasViewHolder, final int i) {
Persona ci = personastList.get(i);
personasViewHolder.txtNombre.setText(ci.getNombre());
personasViewHolder.txtUsuario.setText(ci.getUsuario());
personasViewHolder.txtTwitter.setText(ci.getTwitter());
subject = personastList.get(i);
personasViewHolder.card_view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(v.getContext(), "Eliminar Cardview", Toast.LENGTH_SHORT).show();
personasViewHolder.card_view.setBackgroundResource(R.color.colorPrimary);
globalPosition=i;
notifyDataSetChanged();
return false;
}
});
personasViewHolder.card_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Reproducir", Toast.LENGTH_SHORT).show();
}
});
if(i==globalPosition)
{
//change color like
personasViewHolder.card_view.setBackgroundResource(R.color.colorPrimary);
}
else
{
personasViewHolder.card_view.setBackgroundResource(R.color.colorAccent);
}
}
@Override
public PersonasViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_layout_persona, viewGroup, false);
return new PersonasViewHolder(itemView);
}
public static class PersonasViewHolder extends RecyclerView.ViewHolder {
protected TextView txtNombre;
protected TextView txtUsuario;
protected TextView txtTwitter;
protected CardView card_view;
public PersonasViewHolder(View v) {
super(v);
txtNombre = (TextView) v.findViewById(R.id.txtNombre);
txtUsuario = (TextView) v.findViewById(R.id.txtUsuario);
txtTwitter = (TextView) v.findViewById(R.id.txtTwitter);
card_view = (CardView) v.findViewById(R.id.card_view);
}
}
//Metodo que nos retornarta la cantidad de personas en la lista
@Override
public int getItemCount() {
return personastList.size();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.