【发布时间】:2018-11-18 19:30:41
【问题描述】:
我有一个查看器来显示项目列表。因此,当我单击一个项目时,我想更改该项目的背景颜色。当我取消点击这个元素时,我想回到默认的背景颜色(白色)。
我尝试了以下代码,但有两个问题:
1- 当我取消单击某个项目时,它保持相同的颜色(灰色)。
2- 当我单击一个项目并进行另外两个活动时,当我返回该项目时,该项目保持相同的颜色(灰色),我不希望那样。它应该是白色(默认颜色)。
public class ArtistListAdapter extends RecyclerView.Adapter<ArtistListAdapter.ItemViewHolder> {
// Vars
private List<Artist> artists;
private SearchArtistListener artistListenerAdapter;
/************** Members **************/
public ArtistListAdapter(List<Artist> artists, SearchArtistListener adapterListener) {
this.artists = artists;
this.artistListenerAdapter = adapterListener;
}
/************** Callbacks **************/
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
View view = layoutInflater.inflate(R.layout.item_lista_busca, viewGroup, false);
return (new ItemViewHolder(view, artistListenerAdapter));
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder itemViewHolder, int i) {
itemViewHolder.fillFields(artists.get(i));
}
@Override
public int getItemCount() {
return artists.size();
}
/************** Interfaces/Classes **************/
public final static class ItemViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener, View.OnTouchListener {
// Vars
private SearchArtistListener viewHolderListener;
// Views
private ImageView imgImageView;
private LinearLayout lnLinearLayout;
private TextView subtitleTextView, titleTextView;
/************** Members **************/
public ItemViewHolder(@NonNull View itemView, SearchArtistListener viewHolderListener) {
super(itemView);
this.viewHolderListener = viewHolderListener;
imgImageView = itemView.findViewById(R.id.item_lista_busca_iv_imagem);
subtitleTextView = itemView.findViewById(R.id.item_lista_busca_tv_subtitulo);
titleTextView = itemView.findViewById(R.id.item_lista_busca_tv_titulo);
lnLinearLayout = itemView.findViewById(R.id.item_lista_busca_ll);
itemView.setOnClickListener(this);
lnLinearLayout.setOnTouchListener(this);
}
private void fillFields(Artist artist) {
lnLinearLayout.setBackgroundColor(Color.WHITE);
Picasso.with(itemView.getContext()).load(artist.getPictureSmall()).into(imgImageView);
titleTextView.setText(artist.getName());
subtitleTextView.setText("Artist");
}
/************** Callbacks **************/
@Override
public void onClick(View v) {
if(viewHolderListener != null){
viewHolderListener.onArtistaItemClick(getAdapterPosition());
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if((event.getAction()) == (MotionEvent.ACTION_DOWN))
v.setBackgroundColor(Color.GRAY);
else if((event.getAction()) == (MotionEvent.ACTION_UP))
v.setBackgroundColor(Color.WHITE);
return false;
}
}
/**************** Classes - Interfaces ****************/
public interface SearchArtistListener {
void onArtistaItemClick(int position);
}
}
【问题讨论】:
标签: java android android-adapter android-viewholder