티스토리 뷰
리사이클러뷰 포지션값이 분명
8이 나와야하는데 9가 나오고, 9에서도 9가 나오는 기현상이 발생하였다.
여러차례 검색한 끝에
position 값이 재사용으로 인해 바뀔 수 있다는 말을 듣고 , viewholder이 가지고 있는 getAdapterPosition()을 사용하여 해결하려 했다.
일반적인 경우 해결이 된다는데 내 경우는 해결이 되지 않았다.
그래서 알아본 결과. 내가 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.videoplaylist_item, parent, false);
return new MyViewHolder(v);
}
여기서 v를 글로벌로 View v를 선언한 후 받아주고
거기에 대해 온클릭 리스너를 사용해서 인 것 같다는 의견을 들었다.
나는 그 말을 듣고 MyViewHolder 클래스에 view를 리턴해주는 함수를 만들어 view를 첫 생성과 일치하도록 리턴받아 사용하였다.
----------------------------------------------------------------------
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView video_img;
TextView video_name;
View view;
MyViewHolder(View view){
super(view);
video_img = view.findViewById(R.id.video_img);
video_name = view.findViewById(R.id.video_name);
this.view = view;
}
View Viewreturn()
{
return view;//view를 글로벌로 선언하지 않고 리턴받아서 사용하자. 이게 어떻게 되나면 VideoAdapter 클래스에서
}
}
-------------------------------------------------------------------------------
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.videoplaylist_item, parent, false);
return new MyViewHolder(v);
}
즉 여기서 bind에서 v.setOnClickListener가 아닌
myViewHolder.Viewreturn().setOnClickListener(new View.OnClickListener() {
를 사용하여 해결하였다.
같은 현상을 겪는 분이 계신다면
댓글을 남기면 답변드리겠습니다.
이렇게 하고나니
position 값도, getAdapterPosition() 값도 정상적으로 받아진다
굳~!