Tech & Programming/모바일(Android, Flutter)

AlertDialog의 setSingleChoiceItems 리스트 아이템이 안보이는 경우 확인사항

소스코드 요리사 2018. 9. 5. 08:57



몇 일전 토이프로젝트를 진행하다가 어이없는 실수를 저질렀습니다.

꼼꼼하게 공식개발문서를 읽지 않고, 예제소스코드도 대충보고 짜서 저질러진 일인데 똑같은 실수를 방지하기 위해서 이렇게 부끄러움을 무릅쓰고 블로깅을 합니다.


일단 문제의 소스코드 입니다. 간략하게 해당소스에 대해서 말씀드리면 구글 Geocoding API의 결과를 받아서 결과가 여러개일 경우 선택할 수 있게 single choice 리스트 형태로 AlertDialog를 띄우는 부분입니다.


한번 보시고 어디가 문제 인지 한번 찾아보시길 바랍니다.

혹시 AlertDialog에 대해서 선행 학습이 필요하신 분은 아래 공식문서 및 블로그의 글을 한번 읽어 보시면 됩니다.




private void showAlertDialogSelectedAddress(@Nullable String title, @Nullable String message, ResponseGeoCoding resultData,
                                   @Nullable DialogInterface.OnClickListener onButtonClickListener,
                                   @NonNull String buttonText) 
{

        final List result = resultData.getResults();

        ArrayAdapter resultArrayAdapter = new ArrayAdapter(getContext(), android.R.layout.select_dialog_singlechoice, result);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(title);
        builder.setMessage(message); // 여기가 문제의 부분
        builder.setSingleChoiceItems(resultArrayAdapter, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
       builder.setNegativeButton(buttonText, onButtonClickListener);
       builder.setCancelable(false);
       builder.show();
}

혹시 어디가 문제인지 찾으셨나요?


바로, builder.setMessage(message); 부분입니다.


리스트 형태의 AlertDialog를 만들 때는 메시지를 작성하면 안된다고 하네요. 

만역 메시지를 입력하게되면, 리스트 영역을 메시지영역으로 덮어써버리게 된다고 합니다.


공식문서나 각종 예제를 보시면 setMessage() 가 빠져있는 것을 볼 수 있을 겁니다.

공식문서를 대충 훑어보고 기본 AlertDialog를 작성하듯이 작성하다보니 이런 어처구니 없는 실수를 하고, 디버깅한다고 몇일동안 삽질을 했네요.ㅠㅠ

여러분은 이런 실수하지 않으시길 바랍니다.


*. 스택 오버플로우의 아래 글에서 해당 솔루션을 찾았습니다. 

https://stackoverflow.com/questions/10714911/alertdialogs-items-not-displayed