몇 일전 토이프로젝트를 진행하다가 어이없는 실수를 저질렀습니다.
꼼꼼하게 공식개발문서를 읽지 않고, 예제소스코드도 대충보고 짜서 저질러진 일인데 똑같은 실수를 방지하기 위해서 이렇게 부끄러움을 무릅쓰고 블로깅을 합니다.
일단 문제의 소스코드 입니다. 간략하게 해당소스에 대해서 말씀드리면 구글 Geocoding API의 결과를 받아서 결과가 여러개일 경우 선택할 수 있게 single choice 리스트 형태로 AlertDialog를 띄우는 부분입니다.
한번 보시고 어디가 문제 인지 한번 찾아보시길 바랍니다.
혹시 AlertDialog에 대해서 선행 학습이 필요하신 분은 아래 공식문서 및 블로그의 글을 한번 읽어 보시면 됩니다.
- 구글 대화상자 공식문서 : https://developer.android.com/guide/topics/ui/dialogs?hl=ko
- 참조할 만한 블로그 : http://webnautes.tistory.com/1094
private void showAlertDialogSelectedAddress(@Nullable String title, @Nullable String message, ResponseGeoCoding resultData, @Nullable DialogInterface.OnClickListener onButtonClickListener, @NonNull String buttonText) { final Listresult = 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
'Tech & Programming > 모바일(Android, Flutter)' 카테고리의 다른 글
ViewHolder 가 무엇인가요? (4) | 2019.04.30 |
---|---|
안드로이드 http 프로토콜 접속 시 예외발생 조치 (ERR CLEARTEXT NOT PERMITTED) (18) | 2019.01.23 |
2018 GDG DevFest in 서울 참석 후기 (0) | 2018.11.11 |
Soundpool 재생이 안되는 경우 해결방법 (Soundpool.load 딜레이) (0) | 2018.08.18 |
Intent를 이용한 카카오톡 / SMS 텍스트, 이미지 보내기 (3) | 2018.03.26 |