[英]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.