[Android] 스크롤 하면서 라디오버튼 체크 변경, 체크 클릭시 하면 해당 스크롤로 가기
2021. 4. 13. 16:44ㆍ모바일/Android_Java
스크롤 하면서 라디오버튼 체크 변경, 체크 클릭시 하면 해당 스크롤로 가기
scrollListener
getBinding().recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int position = ((LinearLayoutManager) mLayoutManager).findFirstVisibleItemPosition();
// onCheckedChangeListener null로 해야 setChecked에서 스크롤의 이동이 발생하지 않는다.
switch(position){
case 0:
getBinding().RB1.setOnCheckedChangeListener(null);
getBinding().RB1.setChecked(true);
getBinding().RB1.setOnCheckedChangeListener(mOnCheckedChangeListener); //전망
break;
case 1:
getBinding().RB2.setOnCheckedChangeListener(null);
getBinding().RB2.setChecked(true);
getBinding().RB2.setOnCheckedChangeListener(mOnCheckedChangeListener);
break;
case 2:
getBinding().RB3.setOnCheckedChangeListener(null);
getBinding().RB3.setChecked(true);
getBinding().RB3.setOnCheckedChangeListener(mOnCheckedChangeListener);
break;
case 3:
getBinding().RB4.setOnCheckedChangeListener(null);
getBinding().RB4.setChecked(true);
getBinding().RB4.setOnCheckedChangeListener(mOnCheckedChangeListener);
break;
default:
}
}
});
Radio CheckChangeListener
/**
* 탭 선택
*/
private CompoundButton.OnCheckedChangeListener mOnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
if (!isChecked) {
return;
}
switch (view.getId()) {
case R.id.RB1:
checkProductPosition(0, true);
break;
case R.id.RB2:
checkProductPosition(1, true);
break;
case R.id.RB3:
checkProductPosition(2, true);
break;
case R.id.RB4:
checkProductPosition(3, true);
break;
}
}
};
private void checkProductPosition(final int position, boolean isClick) {
if (isClick) mLayoutManager.scrollToPositionWithOffset(position, 0);
}