2013-11-09 71 views
1

关闭对话框我有一个Dialog,我要管理使用ImageButton关闭它, 当Android的零点例外,我试图用dismiss()cancel()方法,但它们weren`t的存在处理使用图像按钮

buttonDialogClose = (ImageButton) findViewById(R.id.buttonCloseDialog); 
    buttonDialogClose.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      finish(); 
     } 
    }); 

但不幸的是它表明一个例外是:

11-09 11:44:25.696: E/AndroidRuntime(649): FATAL EXCEPTION: main 
11-09 11:44:25.696: E/AndroidRuntime(649): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lavan/com.example.lavan.LavanMainActivity}: java.lang.NullPointerException 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.os.Looper.loop(Looper.java:123) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-09 11:44:25.696: E/AndroidRuntime(649): at java.lang.reflect.Method.invokeNative(Native Method) 
11-09 11:44:25.696: E/AndroidRuntime(649): at java.lang.reflect.Method.invoke(Method.java:507) 
11-09 11:44:25.696: E/AndroidRuntime(649): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-09 11:44:25.696: E/AndroidRuntime(649): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-09 11:44:25.696: E/AndroidRuntime(649): at dalvik.system.NativeStart.main(Native Method) 
11-09 11:44:25.696: E/AndroidRuntime(649): Caused by: java.lang.NullPointerException 
11-09 11:44:25.696: E/AndroidRuntime(649): at com.example.lavan.LavanMainActivity.onCreate(LavanMainActivity.java:92) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-09 11:44:25.696: E/AndroidRuntime(649): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
11-09 11:44:25.696: E/AndroidRuntime(649): ... 11 more 

这是我从而出现,所以我尝试了下面的代码方法代码:

tv5 = (TextView) findViewById(R.id.tvSearchSD); 
    tv5.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Dialog dialog = new Dialog(LavanMainActivity.this); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.setContentView(R.layout.search_dialog_layout); 
      dialog.show(); 

     } 
    }); 

是任何人解释为什么它是我怎么能解决这个问题,非常感谢提前。

+0

你完整的日志,请 – amalBit

+1

使用'(ImageButton的)current_dialog_view表现出来。 findViewById(R.id.buttonCloseDialog);'如果ImageVIew在对话框布局内 –

+0

你能告诉我你的代码与对话框相关而不是imageButton吗? – edisonthk

回答

0

您的buttonDialogClose应该用对话框初始化。在你的情况。

tv5 = (TextView) findViewById(R.id.tvSearchSD); 
    tv5.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Dialog dialog = new Dialog(LavanMainActivity.this); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.setContentView(R.layout.search_dialog_layout); 
      Button buttonDialogClose = (Button) dialog.findViewById(R.id.buttonDialogClose); 
      buttonDialogClose .setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
       dialog.dismiss(); 
      } 
      }); 
      dialog.show(); 

     } 
    });  
+1

谢谢你,谢谢你,谢谢,现在它完美工作,没有任何错误:) – Sasa

+0

如果它有帮助的话,可以升级;) – amalBit

0

使用AlertDialog而不是对话框。这里是alertDialog的示例代码。

private class myCustomAlertDialog extends AlertDialog { 

    protected myCustomAlertDialog(Context context) { 
     super(context); 

     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     View view = inflater.inflate(R.layout.search_dialog_layout, null); 
     ImageButton buttonDialogClose = (ImageButton)view.findViewById(R.id.buttonCloseDialog); 
     setView(view); 
     buttonDialogClose.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // I want the dialog to close at this point 
       dismiss(); 
      } 
     }); 
    } 

} 

比如,它和

new myCustomAlertDialog(LavanMainActivity.this).show();