2013-06-21 63 views
0

我擴展了DialogFragment。它只有一個EditText和接受和取消按鈕。在PositiveButton點擊後取消對DialogFragment的關閉

在裏面,文本輸入到EditText;然後,在點擊接受後,使用try/catch檢查文字。

try裏面,如果一切正常,我會關閉對話框;如果流程進入catch,則想法是保留對話框而不是解除對話框,爲用戶提供糾正文本的機會。

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    ... 
    builder.setPositiveButton(android.R.string.ok, new OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      onAcceptDialog(); 
     } 
    }) 
    ... 
} 

... 

private void onAcceptDialog() { 
    try { 
     ... 
     this.dismiss(); 
    } catch (Exception e) { 
     ... 
     //Dialog is still being dismissed here although it shouldn't 
    } 
} 

但是,仍然被駁回對話雖然我不是要求this.dismiss()catch內。

有沒有辦法在onAcceptDialog()內取消一次解僱?

回答

0

我得到了同樣的問題,使自定義對話框來解決這個問題。

@Override 
protected Dialog onCreateDialog(int id) 
{ 

final AlertDialog.Builder alert = new AlertDialog.Builder(this);  
alert.setTitle("Test"); 
alert.setIcon(R.drawable.logo1); 
alert.setMessage("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus."); 
LinearLayout lila1= new LinearLayout(this); 
LinearLayout linbuttons = new LinearLayout(this); 
linbuttons.setOrientation(LinearLayout.HORIZONTAL); 
Button btnPositive = new Button(this); 
Button btnNegative = new Button(this); 
btnPositive.setText("Send"); 
btnPositive.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // write your code for sending 
     onBackPressed(); 
    } 
}); 
btnNegative.setText("Cancel"); 
btnNegative.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     onBackPressed(); 
    } 
}); 
linbuttons.addView(btnPositive); 
linbuttons.addView(btnNegative); 
lila1.addView(linbuttons); 

return alert.create();  
} 
} 

對於你的reference.。希望這會幫助你。

+0

我猜想這將是唯一的選擇,但我不想鬆開確定和取消按鈕的語義......謝謝! – Jago

+0

歡迎。快樂編碼:) – Nirmal