안녕하세요
제가 RecyclerView를 구성하면서 살펴보니 getItemCount()가 왜 어려번 호출되는지 알수가 없어
질문 올려봅니다.
문제가 된 부분을 재현하기 위해 소스를 만들어 올려보겠습니다.
*MainActivity
private List<MemberDTO> member = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
member.add(new MemberDTO(R.drawable.img0001,"유재석","1인자"));
RecyclerView view = findViewById(R.id.main_recyclerview);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
MyRecyclerViewAdapter myRecyclerViewAdapter = new MyRecyclerViewAdapter();
view.setLayoutManager(layoutManager);
view.setAdapter(myRecyclerViewAdapter);
myRecyclerViewAdapter.addView(member);
}
*RecyclerView
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private List<MemberDTO> addItem;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_items,parent,false);
return new RowCell(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
RowCell item = (RowCell)holder;
item.circleImageView.setImageResource(addItem.get(position).imageView);
item.name.setText(addItem.get(position).name);
item.message.setText(addItem.get(position).message);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
Log.i("TAG","count : ");
return addItem.size();
}
private class RowCell extends RecyclerView.ViewHolder {
CircleImageView circleImageView;
TextView name;
TextView message;
private RowCell(View view) {
super(view);
circleImageView = view.findViewById(R.id.profile_image);
name = view.findViewById(R.id.name);
message = view.findViewById(R.id.message);
}
}
public void addView(List<MemberDTO> _addItem){
addItem = _addItem;
this.notifyDataSetChanged();
}
}
제가 이해한 RecyclerView를 재구성해본 소스입니다.
메인에서 만들어진 데이터를 addView 메소드를 통해 전달하고
데이터가 전달되면 getItemCount()가 데이터의 크기를 가지고 BindViewHolder를 그만큼 작동시킨다 정도로 이해하고있습니다.
getItemCount() 어디서 어떻게 호출되는지를 모르니;;
왜 1개의 데이터를 가지고 count()를 11번이나 호출해야하는지 감을 못잡겠네요.
11번이나 호출은 되지만 onBindViewHolder는 1번만 호출됩니다;;
이렇게 이해한 상태에서 만들어진 앱에서는 출력은 원하는대로 잘 되긴합니다.
그런데 저렇게 이해할수없는 많은 횟수의 호출이 분명 문제가 되지 않을까 생각이 들더라고요.