为什么RecyclerView中Item点击显示错乱了?

http://img1.mukewang.com/5a9d3c4900018f3510801920.jpg


如图,我点击下面的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<LocalAdapter.Holder> {

    private Context context;
    private List<Music> list;
    private OnItemClickListener itemClickListener;

    public LocalAdapter(Context context, List<Music> 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 extends View> 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();
        }
    }
}


肆意先生
浏览 2524回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android