अलर्टडिअलॉग कक्षा की सेट व्यू() विधि डायलॉग बॉक्स के लिए कस्टम दृश्य निर्दिष्ट करने की अनुमति देती है। इस कस्टम व्यू में किन नियंत्रणों को शामिल किया जा सकता है इस पर कोई प्रतिबंध है?
AlertDialog.Builder में setView()
विधि किसी भी वर्ग View से बढ़ाया (देखें यह उप वर्गों और उनके उप वर्गों है) लेता है।
इसका अर्थ है एडिटटेक्स, बटन इत्यादि। लेकिन लेआउट जो व्यू ग्रुप से विस्तारित हैं।
इसके अलावा, अगर हम एक कस्टम व्यू सेट करते हैं, तो क्या हम अभी भी सेटपोसिटिव बटन, सेटनेटिव बटन आदि का उपयोग कर बटन जोड़ सकते हैं?
हां, यह केवल शरीर को प्रभावित करता है। लेआउट के नीचे बटन जोड़े गए हैं।
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog
// layout
builder.setView(inflater.inflate(R.layout.YourLayout, null))
.setPositiveButton(AlertDialog.BUTTON_NEGATIVE, "Yes!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//
}
})
.setNegativeButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
अद्यतन:
इस उत्तर 2 साल पहले के बाद से कुछ नई गतिविधि प्राप्त करने के लिए लग रहे हैं और कुछ चीजें बदल गई हैं।
मैंने स्वरूपण को बेहतर बनाने के लिए कोड को थोड़ा सा अद्यतन किया और सर्वोत्तम प्रथाओं की वर्तमान स्थिति के कारण निम्न युक्ति को जोड़ा।
अलर्टडिअलॉग आपके संवाद के लिए शैली और संरचना को परिभाषित करता है, लेकिन आपको अपने संवाद के लिए एक कंटेनर के रूप में डायलॉग फ्रैगमेंट का उपयोग करना चाहिए। डायलॉग फ्रैगमेंट क्लास संवाद ऑब्जेक्ट पर विधियों को कॉल करने के बजाय, अपने संवाद को बनाने और इसकी उपस्थिति को प्रबंधित करने के लिए आवश्यक सभी नियंत्रण प्रदान करता है।
उपरोक्त उदाहरण का मतलब है जब आप डायलॉगफ्रैगमेंट बढ़ाते हैं और ऑनक्रेटडियलॉग() कॉलबैक विधि में अलर्टडिअलॉग बनाते हैं।
मैं यहाँ अपने जवाब का पालन करने की कोशिश कर रहा हूँ। हालांकि, जब भी मैं लाइन 'लेआउट इनफ्लेटर inflater = getLayoutInflater() में प्रवेश करता हूं;' मुझे हमेशा एक त्रुटि मिलती है कि विधि कॉल को ** बंडल ** पैरामीटर की आवश्यकता होती है। मैंने onrereDialog पैरामीटर से savedInstanceState का उपयोग करने का प्रयास किया, लेकिन इससे स्वयं की नई त्रुटियां हुईं। – Brian
आप शायद एक टुकड़े के भीतर हैं और 'getActivity() प्राप्त करें। GetLayoutInflater() 'या' LayoutInflater.from (getActivity()) ' – Timmetje