목차
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를 동적으로 유지해 창을 닫았다가 열어도 초기 값이 세팅되는 것이 아니라 기존 작업들이 반영되어 유지된다.
'~2023' 카테고리의 다른 글
[GIS/Folium] Folium을 사용해 지도 그리기 (0) | 2022.08.30 |
---|---|
[Scipy] scipy 라이브러리를 사용해 mat 파일 읽어오기 (0) | 2022.08.30 |
[Android] Dialog 실습 - show(), Dialog Fragment (0) | 2022.06.26 |
[Python] 백준 12015번 문제, 가장 긴 증가하는 부분 수열 2 (0) | 2022.05.02 |
[Python] 백준 12738번 문제, 가장 긴 증가하는 부분 수열 3 (0) | 2022.05.02 |