为什么RecyclerView中Item点击显示错乱了?
如图,我点击下面的item上面第二个item也会变色,我并没有滑动屏幕。以下是Adapter的代码:
package com.litemusic.dasong.ui.local.adapter;import android.content.Context;import android.graphics.Color;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.litemusic.dasong.R;import com.litemusic.dasong.base.OnItemClickListener;import com.litemusic.dasong.db.bean.Music;import com.litemusic.dasong.db.helper.MusicHelper;import java.util.List;/** * Created by dason on 2018/3/5 0005. */public class LocalAdapter extends RecyclerView.Adapter { private Context context; private List list; private OnItemClickListener itemClickListener; public LocalAdapter(Context context, List list){ this.context = context; this.list = list; } @Override public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View root = LayoutInflater.from(context).inflate(R.layout.item_music,parent,false); return new Holder(root,itemClickListener); } @Override public void onBindViewHolder(Holder holder, int position) { holder.initView(position); } @Override public int getItemCount() { return list.size(); } public void setOnItemClickListener(OnItemClickListener listener){ if(itemClickListener == null){ itemClickListener = listener; } } class Holder extends RecyclerView.ViewHolder implements View.OnClickListener{ private TextView tvTitle; private TextView tvArtist; private TextView tvAlbum; private View vLine; private OnItemClickListener listener; public Holder(View itemView,OnItemClickListener listener) { super(itemView); this.listener = listener; itemView.setOnClickListener(this); } public void initView(int position){ tvTitle = $(R.id.tv_title); tvArtist = $(R.id.tv_artist); tvAlbum = $(R.id.tv_album); vLine = $(R.id.v_line); if(position == list.size()-1){ vLine.setVisibility(View.GONE); } setViewText(position); setTextColor(position); } public void setViewText(int position){ tvTitle.setText(list.get(position).getTitle()); tvArtist.setText(list.get(position).getArtist()); tvAlbum.setText(list.get(position).getAlbum()); } public void setTextColor(int position){ Music music = list.get(position); int color = Color.parseColor("#93e0ff"); if(music != null && music.getIsPlaying()){ tvTitle.setTextColor(color); tvArtist.setTextColor(color); tvAlbum.setTextColor(color); Log.d("ZLog","pos="+position); } } public V $(int id){ return (V)itemView.findViewById(id); } @Override public void onClick(View v) { int postion = getAdapterPosition(); listener.onItemClick(v,postion); for(Music m:list){ if(m.getIsPlaying()){ int index = list.indexOf(m); if(index != postion){ m.setIsPlaying(false); MusicHelper.update(m); } break; } } Music music = list.get(postion); if(music != null && !music.getIsPlaying()){ music.setIsPlaying(true); MusicHelper.update(music); } list.removeAll(list); list.addAll(MusicHelper.getAll()); notifyDataSetChanged(); } }} |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|