[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);
}