2013-12-13 15 views
0

我在按鈕上單擊以使用以下方法顯示帶有圖像列表的對話框。如果我從圖像中刪除setOnclickListener,對話框正常工作。但是,如果我使用setOnclickListener,則應用程序將不幸停止。對話框中imageView的setOnClickListener不起作用

private void showFrame(){ 
      frameDialog = new Dialog(CameraActivity.this); 
      frameDialog.setContentView(R.layout.frame_selection); 
      frameDialog.setTitle("Select a frame"); 

      ImageView thumb1 = (ImageView) findViewById(R.id.thumbView1); 
      ImageView thumb2 = (ImageView) findViewById(R.id.thumbView2); 
      ImageView thumb3 = (ImageView) findViewById(R.id.thumbView3); 

      frameDialog.show(); 
      thumb1.setOnClickListener(
        new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
           Toast.makeText(getApplicationContext(), "to this is okay!", Toast.LENGTH_LONG).show(); 
           frameDialog.dismiss(); 

         } 
        } 
       ); 
thumb2.setOnClickListener(
        new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
           Toast.makeText(getApplicationContext(), "to this is okay!", Toast.LENGTH_LONG).show(); 
           frameDialog.dismiss(); 

         } 
        } 
       ); 
       thumb3.setOnClickListener(
        new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
           Toast.makeText(getApplicationContext(), "to this is okay!", Toast.LENGTH_LONG).show(); 
           frameDialog.dismiss(); 

         } 
        } 
       ); 


       } 

logcat的

12-13 11:22:07.110: E/AndroidRuntime(17913): FATAL EXCEPTION: main 
12-13 11:22:07.110: E/AndroidRuntime(17913): java.lang.NullPointerException 
12-13 11:22:07.110: E/AndroidRuntime(17913): at com.***.**.**.showFrame(CameraActivity.java:98) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at com.**.**.***.access$0(CameraActivity.java:87) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at com.**.**.**$3.onClick(CameraActivity.java:79) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at android.view.View.performClick(View.java:4261) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at android.view.View$PerformClick.run(View.java:17420) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at android.os.Handler.handleCallback(Handler.java:615) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at android.os.Looper.loop(Looper.java:137) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at android.app.ActivityThread.main(ActivityThread.java:4944) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at java.lang.reflect.Method.invokeNative(Native Method) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at java.lang.reflect.Method.invoke(Method.java:511) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
12-13 11:22:07.110: E/AndroidRuntime(17913): at dalvik.system.NativeStart.main(Native Method) 

** NB 98無線是:thumb1.setOnClickListener(........

回答

6

替換

ImageView thumb1 = (ImageView) findViewById(R.id.thumbView1); 
ImageView thumb2 = (ImageView) findViewById(R.id.thumbView2); 
ImageView thumb3 = (ImageView) findViewById(R.id.thumbView3); 

ImageView thumb1 = (ImageView) frameDialog.findViewById(R.id.thumbView1); 
ImageView thumb2 = (ImageView) frameDialog.findViewById(R.id.thumbView2); 
ImageView thumb3 = (ImageView) frameDialog.findViewById(R.id.thumbView3); 
1
變化

ImageView thumb1 = (ImageView) findViewById(R.id.thumbView1); 
ImageView thumb2 = (ImageView) findViewById(R.id.thumbView2); 
ImageView thumb3 = (ImageView) findViewById(R.id.thumbView3); 

ImageView thumb1 = (ImageView)frameDialog.findViewById(R.id.thumbView1); 
ImageView thumb2 = (ImageView)frameDialog.findViewById(R.id.thumbView2); 
ImageView thumb3 = (ImageView)frameDialog.findViewById(R.id.thumbView3); 

findViewById查找具有在當前充氣佈局提到的ID的圖。所以你需要使用對話框來初始化視圖。

+1

感謝@Raghunandan爲您的快速反應與解釋.. :) – CrazyLearner