먼저 지역데이터를 준비하시고 라디오 버튼을 그려넣으세요.  지역데이터는 고정된 리스트이므로 enum을 사용하겠습니다.
public enum Sido {
    SEOUL("서울),
    ULSAN("울산"),
     ...
     JEJU("제주");
    private final String label;
    public Sido(String label) {
       this.label = label;
    }
  
   public String getLabel() {
       return this.label;
   }
}
 
라디오그룹에 시도 라디오 버튼을 생성합니다. 라디오버튼을 누를 때 리스트뷰에 필요한 시도데이터를 가져와서 보여주는 코드를구현하시면 됩니다. 동적으로 라디오버튼을 생성하지 않고 XML에 만들어질 걸 사용하시련 rG에서 라디오버튼을 찾아 View.OnClickListener를 설정하면 됩니다.
private sidoClickListener new View.OnClickListner() {
        @Override 
        public void onClick(View view) {
            Sido sido = sidoButtons.get(view);
            updateSidoDataBySido(sido); //구현
        }
 });
// 라디오버튼 동적생성
Map<Sido, View> sidoButtons = new HashMap<>();
for (Sido sido : Sido.values()) {
    RadioButton button = new RadioButton(rG.getContext());
    button.setText(sido.getLabel()):
    button.setOnClickListener(sidoClickListener);
    rG.addView(button); 
    sidoButtons.put(sido, button);
}
/* XML에 존재하는 라디오 버튼 찾기. 이 방법을 사용하면 sidoButtons를 매핑하는 방법이 바뀌야 겠죠.
for (int i = 0; i < rG.getChildCount(); i++) {
        View child = viewGroup.getChildAt(i);
        if (child instanceof RadioButton) {
               RadioButton button =  (RadioButton) child;
               button.setOnClickListener(sidoClickListener);
        }
    }
*/ 
updateSidioDataBySido 메소드를 구현합니다. 구체적인 코드는 님이 아실 것이므로 채워넣으시면 됩니다.
private void updateSidoDataBySido(Sido sido) {
       items = // TODO : 필요한 시도데이터를 가져온다.
       adapter.setItems(items); // setItems가 notifyDataSetChanges를 호출하도록 함.
}