제공해주신 MBTIFilteredHomeAdapter
의 코드를 확인해본 결과, onBindViewHolder
에서 아이템의 userMBTI
가 일치하지 않는 경우, 아이템 뷰의 Visibility를 View.GONE
으로 설정하고 뷰의 레이아웃 파라미터를 (0, 0)으로 설정하는 코드가 있습니다.
if (model.getSelectedButtons() != null && model.getSelectedButtons().contains(userMBTI)) {
...
} else {
holder.itemView.setVisibility(View.GONE);
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
}
이 부분이 아이템 간격이 넓게 보이는 원인이 될 가능성이 있습니다. View.GONE
으로 설정하면 뷰는 보이지 않게 되지만, 여전히 레이아웃의 구조상 그 공간을 차지하게 됩니다. 따라서, userMBTI
가 일치하지 않는 아이템들이 '보이지 않는' 공간을 차지하면서 실제로 보이는 아이템들 간에 간격이 넓게 보일 수 있습니다.
이 문제를 해결하기 위한 가장 간단한 방법은, 아이템들을 필터링할 때 userMBTI
가 일치하지 않는 아이템들을 아예 리스트에서 제외하는 것입니다. 아래의 코드처럼 databaseRef.addValueEventListener
에서 데이터를 가져올 때, userMBTI
가 일치하는 아이템들만 homeItems
리스트에 추가하도록 합니다.
databaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
homeItems.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
MainHomeItem item = snapshot.getValue(MainHomeItem.class);
if (item != null) {
List<String> selectedButtons = item.getSelectedButtons();
// Check if selectedButtons is not null and contains userMBTI
if (selectedButtons != null && selectedButtons.contains(userMBTI)) {
homeItems.add(item);
}
}
}
notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "Failed to fetch data: " + databaseError.getMessage());
}
});
그리고 onBindViewHolder
와 getItemCount
에서 userMBTI
일치 여부를 확인하는 코드는 더 이상 필요하지 않으므로 제거하면 됩니다.
@Override
public void onBindViewHolder(@NonNull MBTIFilteredHomeViewHolder holder, int position) {
MainHomeItem model = homeItems.get(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onItemClick(model);
}
}
});
Glide.with(holder.itemView.getContext())
.load(model.getImageUrl())
.into(holder.imageView);
holder.titleTextView.setText(model.getTitle());
holder.recruitPeriodTextView.setText(model.getRecruitPeriod());
}
@Override
public int getItemCount() {
return homeItems.size();
}
이렇게 수정
하면, RecyclerView
의 아이템 간 간격이 넓게 보이는 문제를 해결할 수 있을 것입니다.