TabFragment 하단에 RecyclerView를 넣어서 DataBinding으로 데이터들을 넣어주고, RecyclerView의 왼쪽부분에 checkbox가 있는 상황.
그리고 이 전체 체크박스를 한꺼번에 클릭할 수 있는 전체클릭 버튼이 TabFragment에 위치함.
우선 RecyclerView Databinding으로 구현된 체크박스가 클릭되게 하는 부분부터 설명하고 전체 체크박스 클릭 기능은 차차 작성하도록 하겠다.
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.TestViewHolder>{
public interface OnItemClickListener {
void onItemClick(int pos, boolean b);
}
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}
...
@Override
public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
final int pos = position; // 클릭된 포지션 값
ListItem item = listItems.get(pos);
holder.bind(item);
holder.checkBox.setTag(item);
holder.checkBox.setChecked(item.getCheckYN());
mCheckBoxes.add(holder.checkBox);
}
...
class TestViewHolder extends RecyclerView.ViewHolder{
public CheckBox checkBox;
ListDataBinding binding;
public TestViewHolder(ListDataBinding binding, ViewGroup parent) {
super(binding.getRoot());
checkBox = binding.getRoot().findViewById(R.id.checkbox);
this.binding = binding;
//체크박스 이벤트 리스너
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
int pos = getAdapterPosition();
ListItems.get(pos).setCheckYN(b);
onItemClickListener.onItemClick(pos, b);
}
});
}
}
...
mTestAdapter = new TestAdapter();
//반드시 이벤트리스너를 setAdapter 하기 전에 넣어줘야 한다.
mTestAdapter.setOnItemClickListener(new TestAdapter.OnItemClickListener() {
@Override
public void onItemClick(int pos, boolean b) {
String cnt = String.valueOf(mTestAdapter.getItemCount());
binding.allText.setText(cnt);
CheckList checkList = new CheckList();
if(b == true) {
checkList.setId(listItems.get(pos).getListId());
checkList.setPosition(pos);
binding.linearLayout.setVisibility(View.GONE);
binding.greenLinearLayout.setVisibility(View.VISIBLE);
checkLists.add(checkList);
binding.clickedText.setText(String.valueOf(checkLists.size()));
} else {
if(checkLists.size() == 1) {
checkLists.clear();
binding.clickedText.setText("0");
binding.linearLayout.setVisibility(View.VISIBLE);
binding.greenLinearLayout.setVisibility(View.GONE);
} else {
for(int i = 0; i < checkLists.size(); i++) {
if (checkLists.get(i).getId() == listItems.get(pos).getListId()) {
checkLists.remove(i);
binding.clickedText.setText(String.valueOf(checkLists.size()));
}
}
}
}
Log.d("checklist", "" + checkLists.size());
}
});
binding.recyclerView.setAdapter(mTestAdapter);
...