본문 바로가기

~2023

[Android] Dialog 실습 - Item List Dialog Fragment

728x90
반응형

목차

1. 메소드 설명

2. 작동 화면

3. 코드 리뷰

1. 메소드 설명

Item List를 통해 Dialog에 리스트, 라디오 버튼, 그리고 체크 박스를 손쉽게 추가할 수 있다. Dialog Fragment에서 했던 것처럼 클래스의 자식 객체를 만들어 설정해준다. (생성과 관리를 별도의 영역에서 진행)

2. 작동 화면

3. 코드 리뷰

public static class ListDF extends DialogFragment {
   @NonNull
   @Override
   public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
      CharSequence[] items = {"Red", "Green", "Blue"};
      boolean[] checkedItem = {true, false, false};
      AlertDialog.Builder adBuilder = new AlertDialog.Builder(getActivity());
      
      adBuilder.setTitle("Dialog with List")
      /* List Item
      .setItems(items, new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getActivity(), items[which], Toast.LENGTH_SHORT).show();
         }
      })
      */
      /* Radio Button
      .setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getActivity(), items[which], Toast.LENGTH_SHORT).show();
         }
      })
      */
      // Checked Box Button
      .setMultiChoiceItems(items, checkedItem, new DialogInterface.OnMultiChoiceClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            String str = (isChecked) ? " Checked" : " Unchecked";
            Toast.makeText(getActivity(), items[which] + str, Toast.LENGTH_SHORT).show();
         }
      })
      .setPositiveButton("Close", null)
      .setCancelable(false);
      
      return adBuilder.create();
   }
}

// main
Button btListDialog = findViewById(R.id.btListDialog);
btListDialog.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
      DialogFragment listDF = new ListDF();
      
      listDF.setCancelable(false);
      listDF.show(getSupportFragmentManager(), "listDF");
   }
});

일반적인 DialogFragment와 다른 점은 setItems()로 리스트를, setSingleChoiceItems()로 라디오 버튼을, 마지막으로 setMultiChoiceItems()로 체크 박스를 생성할 수 있다. 라디오 버튼과 체크 박스는 초기 상태가 체크 되어 있게 상태를 초기화 할 수 있는데 체크 박스는 boolean[]를 만들어 true(선택O) 또는 false(선택X)를 부가적으로 전달해줘야 한다. which는 선택된 아이템의 순서이기 때문에 items[which]를 통해 무엇이 선택됐는지 확인 할 수 있다.

라디오 버튼에서 다이얼로그의 상태를 초기화하지 않고 기존 상태를 유지 할 수 있는 방법은 setSingleChoiceItems(items, 초기 체크 되어 있는 아이템 번호, 리스너)에서 두 번째 매개변수에 which 값을 넣어주면 마지막에 선택된 라디오 버튼 순서가 기억 되어 다이얼로그 창을 닫아도 기존 상태를 유지한다. 체크 박스도 마찬가지로 (items, checked 리스트, 리스너)에서 checked리스트[which] = isChecked로 해준다면 True 또는 False를 동적으로 유지해 창을 닫았다가 열어도 초기 값이 세팅되는 것이 아니라 기존 작업들이 반영되어 유지된다.

728x90
반응형