मेरे पास एक कस्टम लेआउट (केवल एक संपादन टेक्स्ट) के साथ एक अलर्टडिअलॉग है और मैं ठीक बटन क्लिक होने पर डेटा को सत्यापित करना चाहता हूं। अगर सत्यापन विफल रहता है तो मैं संवाद बंद नहीं करना चाहता हूं।डायलॉगफ्रैगमेंट के साथ एंड्रॉइड अलर्टडियलॉग: यदि ओके पर क्लिक किया गया है तो भी संवाद बंद न करें
मैं संवाद के डिफ़ॉल्ट बटन (सकारात्मक और नकारात्मक) का उपयोग कर रहा हूं। अगर मैं "setPositiveButton (" ", नया DialogInterface.OnClickListener() ..." संवाद हमेशा बंद रहता है। मैंने कई पोस्ट देखी हैं और उन्होंने कहा कि ऑनक्लिक श्रोता को ओवरराइड किया जाना चाहिए, लेकिन मैं इसे काम नहीं कर सकता । इस कोड को मैंने पाया है:
Button theButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
theButton.setOnClickListener(new CustomListener(dialog));
चूंकि यह कहते हैं कि यह किया जाना चाहिए संवाद दिखा के बाद मैं अपने गतिविधि के अंदर इस कोड को रखा, मेरे DialogFragment अंदर नहीं, लेकिन अगर मैं mDialogFragment.getDialog का उपयोग करें (यह) हमेशा रिटर्न अशक्त
यह मेरा संवाद टुकड़ा का एक हिस्सा है:।
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.new);
LayoutInflater inflater = getActivity().getLayoutInflater();
dialogView = inflater.inflate(R.layout.edit_license, null);
builder.setView(dialogView)
// Add action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
और मेरी गतिविधि में मैं निम्न करें:
DialogFragment dialog = new MyDialogFragment(true, null);
dialog.show(getSupportFragmentManager(), "EditLicenseDialogFragment");
AlertDialog alertDialog = (AlertDialog)dialog.getDialog();
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
btnPositive.setOnClickListener(new CustomListener(alertDialog));
...
class CustomListener implements View.OnClickListener {
private final Dialog dialog;
public CustomListener(Dialog dialog) {
this.dialog = dialog;
}
@Override
public void onClick(View v) {
...
}
}
जैसा कि मैंने कहा, (AlertDialog) dialog.getDialog(); हमेशा शून्य देता है। ऐसा क्यों है? अगर सत्यापन ठीक नहीं है तो मैं संवाद बंद करने से कैसे बच सकता हूं?
धन्यवाद!
दिलचस्प। और GetButton समारोह के बारे में क्या? यह डायलॉग फ्रैगमेंट पर नहीं है, और यदि मैं संवाद प्राप्त करने का प्रयास करता हूं तो यह शून्य हो जाता है। –
संवाद शून्य हो जाता है क्योंकि getDialog द्वारा लौटाया गया mDialog नहीं बनाया गया है (अभी तक)। समाधान डायलॉगफ्रैगमेंट के अंदर अन्य जीवन चक्र विधियों को लागू करना होगा जो क्रिएटडिअलॉग/शो फ़ंक्शन पर होते हैं। लेकिन यह वास्तव में आपके लिए एक समस्या नहीं है केवल क्लिक लिस्टनर को संवादफलक के अंदर परिभाषित करें (जैसा कि अब है)। लेकिन संवाद पर संवाद संचालन न करें लेकिन संवादफलक पर, इसके साथ आपको getDialog() – Tobrun