티스토리 뷰

리사이클러뷰 포지션값이 분명

 

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() 값도 정상적으로 받아진다

 

굳~!

댓글
최근에 올라온 글
최근에 달린 댓글
250x250