2013-07-30 43 views
2

我有一個自定義對話框。所以一個按鈕單擊我顯示它。現在我有一個按鈕在自定義對話框中我想關閉它按一下該按鈕,但它是拋出任何空指針exception.Here是我的代碼,我使用,以顯示它:在Android中點擊按鈕關閉一個自定義對話框

private void showPreConfirmationDialog() { 
    final Dialog dialog= new Dialog(context);; 
    button = (ImageView) findViewById(R.id.bookButton); 
    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      dialog.setContentView(R.layout.pre_confirmation_dailog); 
      //dialog.setCancelable(false); 
      dialog.setTitle("OnWard Details..."); 
      dialog.show(); 

     } 
    }); 

    backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage); 
    backPreConfirmation.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      dialog.dismiss(); 

     } 
    }); 
} 

在backPreConfirmation按鈕,點擊它拋出我的這個錯誤:

07-30 09:25:15.830: E/AndroidRuntime(26599): FATAL EXCEPTION: main 
07-30 09:25:15.830: E/AndroidRuntime(26599): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.result/com.android.result.Result}: java.lang.NullPointerException 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.os.Looper.loop(Looper.java:137) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at java.lang.reflect.Method.invoke(Method.java:511) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at dalvik.system.NativeStart.main(Native Method) 
07-30 09:25:15.830: E/AndroidRuntime(26599): Caused by: java.lang.NullPointerException 
07-30 09:25:15.830: E/AndroidRuntime(26599): at com.android.result.Result.showPreConfirmationDialog(Result.java:66) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at com.android.result.Result.onCreate(Result.java:41) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.Activity.performCreate(Activity.java:5104) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-30 09:25:15.830: E/AndroidRuntime(26599): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
07-30 09:25:15.830: E/AndroidRuntime(26599): ... 11 more 

我有什麼錯了,請讓我知道

回答

2

您需要使用對話框對象初始化你的意見

final Dialog dialog= new Dialog(context); 
    dialog.setContentView(R.layout.pre_confirmation_dailog); 
    backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage); 

onCreate

button = (ImageView) findViewById(R.id.bookButton); 

然後

button.setOnClickListener(new OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     showPreConfirmationDialog(); 
    } 
}); 

初始化這showPreConfirmationDialog()

private void showPreConfirmationDialog() { 
final Dialog dialog= new Dialog(context); 
dialog.setContentView(R.layout.pre_confirmation_dailog); 
dialog.setTitle("Loading..."); 
dialog.show(); 
backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage); 
backPreConfirmation.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     dialog.dismiss(); 

    } 
}); 
} 

注意:您可以將當前視圖層次結構的findViewById設置爲該活動。您將佈局的內容設置爲對話框。並且您在該佈局中有按鈕backPreConfirmation。所以你需要使用對話框來誇大你的按鈕。

+0

我做了同樣的變化還是同樣的問題.same錯誤在錯誤日誌 – Developer

+0

移動'dialog.show()'按鈕點擊收聽外面 – Raghunandan

+0

按鈕在主佈局和backPreConfirmation在preconformation對話框佈局 – Developer

0

你有兩個這樣的改變:

button = (ImageView) dialog.findViewById(R.id.bookButton); 
backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage); 

所以,現在你可以得到妥善解決。

0

這是因爲「backPreConfirmation」不在您的主佈局中。它位於您的「pre_confirmation_dailog」佈局中。爲了得到這個方法做到以下幾點,

replace 
    backPreConfirmation = (ImageView)findViewById(R.id.backImage); 
with 

    backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage); 
0

做到這一點

button = (ImageView) dialog.findViewById(R.id.bookButton); 

這可能會解決你的問題。

0

您參考設置的所有對話框孩子button = (ImageView)dialog.findViewById(R.id.bookButton); backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage);

0

私人無效showPreConfirmationDialog(){

button = (ImageView) findViewById(R.id.bookButton); 

    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

       final Dialog dialog= new Dialog(context); 
      dialog.setContentView(R.layout.custom);// Custome layout xml 
      dialog.setTitle("OnWard Details..."); 
    backPreConfirmation = (ImageView)dialog.findViewById(R.id.backImage); 
    backPreConfirmation.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      dialog.dismiss(); 

     } 
    }); 
      dialog.show(); 

     } 
    }); 

} 

嘗試設置當前活動視圖的參考對話框的孩子,而不是這種使用對話框這

+1

非常感謝您的幫助 – Developer

+0

Dose it work ... –

0

試試這個。 ...

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
final Dialog dialog = builder.create(); 
myButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 
      dialog.dismiss(); 
     } 
}); 
dialog.show(); 

...

+2

嘗試添加更多關於您爲什麼用這種方式回答的描述。請閱讀回答問題的指導原則:https://stackoverflow.com/help/how-to-answer – TrevorBrooks

+0

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Machavity

0

上述工程的解決方案,但它是一個有點長,我想最好的解決方案是讓對話框對象全局或場你在工作活動,那麼當你完成它的工作時,使用對象的方法dismiss()。

//out side any method(global domain) 
private Dialog dialog; 

//inside the button handler of the dialog 
dialog.dismiss(); 
相關問題