简体   繁体   English

Android - RecyclerView onClick 不起作用

[英]Android - RecyclerView onClick not work

I try to change the background of the ImageView by clicking them, but it isn't work.我尝试通过单击它们来更改ImageView的背景,但它不起作用。 I've this in my ViewHolder我的 ViewHolder 中有这个

I get我得到

Attempt to invoke virtual method ..StreamViewHolder.getAdapterPosition() on a null object erference尝试在空对象引用上调用虚拟方法 ..StreamViewHolder.getAdapterPosition()

import java.util.List;

import de.caglar.aqua.R;
import de.caglar.aqua.objects.StreamObject;
import de.caglar.aqua.views.CircularImageView;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class StreamAdapter extends RecyclerView.Adapter<StreamAdapter.StreamViewHolder> implements View.OnClickListener {

    public static List<StreamObject> streams;

    public StreamAdapter(List<StreamObject> s){
        streams = s;
    }

    public static class StreamViewHolder extends RecyclerView.ViewHolder {      
        CardView cardView;
        public TextView streamTitle;
        public TextView streamText;
        public TextView streamDescription;
        public CircularImageView streamPhoto;
        public ImageView streamLike;

        public StreamViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.stream_cardview);
            streamTitle = (TextView) itemView.findViewById(R.id.stream_title);
            streamText = (TextView) itemView.findViewById(R.id.stream_text);
            streamDescription = (TextView) itemView.findViewById(R.id.stream_description);
            streamPhoto = (CircularImageView) itemView.findViewById(R.id.stream_photo);
            streamLike = (ImageView) itemView.findViewById(R.id.stream_like);
        }
    }

    @Override
    public int getItemCount() {
        return streams.size();
    }

    @Override
    public void onBindViewHolder(StreamViewHolder streamViewHolder, int i) {
        streamViewHolder.streamTitle.setText(streams.get(i).title);
        streamViewHolder.streamText.setText(streams.get(i).text);
        streamViewHolder.streamDescription.setText(streams.get(i).description);
        streamViewHolder.streamPhoto.setBackground(streams.get(i).photo);
        if(streams.get(i).isLiked) {
            streamViewHolder.streamLike.setImageResource(R.drawable.ic_action_like_active);
        } else {
            streamViewHolder.streamLike.setImageResource(R.drawable.ic_action_like);
        }
        streamViewHolder.streamLike.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        try {
            if (v instanceof ImageView) {
                StreamViewHolder holder = (StreamViewHolder) v.getTag();
                int position = holder.getAdapterPosition();
                if(streams.get(position).isLiked) {
                    streams.get(position).isLiked = false;
                    holder.streamLike.setImageResource(R.drawable.ic_action_like);
                } else {
                    streams.get(position).isLiked = true;
                    holder.streamLike.setImageResource(R.drawable.ic_action_like_active);
                }
            }
        } catch (Exception e) {
            Toast.makeText(v.getContext(), e.getMessage().toString(), Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public StreamViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview_stream, viewGroup, false);
        StreamViewHolder pvh = new StreamViewHolder(v);
        return pvh;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }
}

把它放在你的onBindViewHolder方法中

streamViewHolder.streamLike.setTag(streamViewHolder)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM