~2025

[Android] Dialog 실습 - Item List Dialog Fragment

범범범즈 2022. 6. 26. 07:18
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
반응형