마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스피너 드롭다운

0 추천

        adSpin = ArrayAdapter.createFromResource
  (settingActivity.this, R.array.time, android.R.layout.simple_spinner_dropdown_item);
  adSpin.setDropDownViewResource
  (android.R.layout.simple_spinner_dropdown_item);
  spin1.setAdapter(adSpin);
        spin1.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
             AlertDialog.Builder builder = new AlertDialog.Builder(settingActivity.this);
             builder.setTitle("시간을 선택하세요.");
             builder.setSingleChoiceItems(R.array.time, -1, new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int item) {
                     Toast.makeText(getApplicationContext(), adSpin.getItem(item)+ "선택되었습니다.", Toast.LENGTH_SHORT).show();
                     dialog.dismiss();
                 }
             });
                builder.setNegativeButton("취소",  
                        new DialogInterface.OnClickListener() {  
                          @Override
                          public void onClick(DialogInterface dialog, int which) {  
                            dialog.dismiss();  
                          }
                });
             AlertDialog alert = builder.create();
                alert.show();
 
            }
 
            public void onNothingSelected(AdapterView<?>  parent) {
 
            }
 
        });

01-07 21:25:07.435: W/dalvikvm(9478): threadid=1: thread exiting with uncaught exception (group=0x4135f2a0)
01-07 21:25:07.440: E/AndroidRuntime(9478): FATAL EXCEPTION: main
01-07 21:25:07.440: E/AndroidRuntime(9478): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andro/com.andro.settingActivity}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.ActivityThread.access$600(ActivityThread.java:140)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.os.Looper.loop(Looper.java:137)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.ActivityThread.main(ActivityThread.java:4898)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at java.lang.reflect.Method.invokeNative(Native Method)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at java.lang.reflect.Method.invoke(Method.java:511)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at dalvik.system.NativeStart.main(Native Method)
01-07 21:25:07.440: E/AndroidRuntime(9478): Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.widget.AdapterView.setOnClickListener(AdapterView.java:773)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at com.andro.settingActivity.onCreate(settingActivity.java:314)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.Activity.performCreate(Activity.java:5206)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
01-07 21:25:07.440: E/AndroidRuntime(9478):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
01-07 21:25:07.440: E/AndroidRuntime(9478):  ... 11 more
01-07 21:25:08.690: I/Process(9478): Sending signal. PID: 9478 SIG: 9

 

현재 이런식으로 했는데요. 인터넷은 그냥 기본소스만 작성해도 다이얼로그로 열리던데..

저는 현재 액티비티에서 스크롤이 생기는 item 목록만 보이더라구요..

어떻게 된건지...ㅜㅜ 그래서 이렇게 스피너가 선택됬을때 다이얼로그가 열리도록했는데..

이것도 오류가 나네요.. 로그캣 한번만 봐주시면 감사하습니다.

314번째줄은 spin1.setonClickListener(new onClickListener(){ 이부분입니다..

헬프미 (5,430 포인트) 님이 2015년 1월 7일 질문

1개의 답변

0 추천
 
채택된 답변
setOnClickListener 대신 setOnItemClickListener 를 사용해 보세요.

리스트 형태의 클릭 이벤트는 보통 setOnItemClickListener 를 사용합니다.
가랑비 (10,530 포인트) 님이 2015년 1월 8일 답변
헬프미님이 2015년 1월 8일 채택됨
예 처음에 setOnItemClickListener을 사용했는데요.
이건 스피너안에 아이템을 선택해야 다이얼로그가 열리더라구요..
그게 아니라 스피너 버튼을 클릭하면 바로 다이얼로그가 열리게 하려고 이렇게 나타낸건데...
죄송하지만 소스 짜주시는건 무리일가요..?
인터넷을 봐도 도저히 모르겠어서..ㅜㅜ
소스를 짜서 드리는 건 좀 무리일 것 같구요..^^;
단지 스피너 눌렀을 때 시간 선택 다이얼로그를 띄우실 거면
스피너 대신 일반 버튼을 이용하시면 어떤가요?
스피너 기능은 사용 안하시는 거 같아서요.
단지 모양만 필요한 거라면 버튼에 스피너 이미지를 입히는 것이 어떤가 싶네요~
...