2013-02-12 13 views
8

setView()AlertDialog वर्ग की विधि डायलॉग बॉक्स के लिए कस्टम दृश्य निर्दिष्ट करने की अनुमति देती है। इस कस्टम व्यू में किन नियंत्रणों को शामिल किया जा सकता है इस पर कोई प्रतिबंध है?एंड्रॉइड अलर्टडियलॉग सेट व्यू नियम

इसके अलावा, अगर हम कस्टम दृश्य सेट करते हैं, तो क्या हम अभी भी setPositiveButton(), setNegativeButton() आदि का उपयोग करके बटन जोड़ सकते हैं?

उत्तर

28

अलर्टडिअलॉग कक्षा की सेट व्यू() विधि डायलॉग बॉक्स के लिए कस्टम दृश्य निर्दिष्ट करने की अनुमति देती है। इस कस्टम व्यू में किन नियंत्रणों को शामिल किया जा सकता है इस पर कोई प्रतिबंध है?

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 साल पहले के बाद से कुछ नई गतिविधि प्राप्त करने के लिए लग रहे हैं और कुछ चीजें बदल गई हैं।

मैंने स्वरूपण को बेहतर बनाने के लिए कोड को थोड़ा सा अद्यतन किया और सर्वोत्तम प्रथाओं की वर्तमान स्थिति के कारण निम्न युक्ति को जोड़ा।

अलर्टडिअलॉग आपके संवाद के लिए शैली और संरचना को परिभाषित करता है, लेकिन आपको अपने संवाद के लिए एक कंटेनर के रूप में डायलॉग फ्रैगमेंट का उपयोग करना चाहिए। डायलॉग फ्रैगमेंट क्लास संवाद ऑब्जेक्ट पर विधियों को कॉल करने के बजाय, अपने संवाद को बनाने और इसकी उपस्थिति को प्रबंधित करने के लिए आवश्यक सभी नियंत्रण प्रदान करता है।

उपरोक्त उदाहरण का मतलब है जब आप डायलॉगफ्रैगमेंट बढ़ाते हैं और ऑनक्रेटडियलॉग() कॉलबैक विधि में अलर्टडिअलॉग बनाते हैं।

+0

मैं यहाँ अपने जवाब का पालन करने की कोशिश कर रहा हूँ। हालांकि, जब भी मैं लाइन 'लेआउट इनफ्लेटर inflater = getLayoutInflater() में प्रवेश करता हूं;' मुझे हमेशा एक त्रुटि मिलती है कि विधि कॉल को ** बंडल ** पैरामीटर की आवश्यकता होती है। मैंने onrereDialog पैरामीटर से savedInstanceState का उपयोग करने का प्रयास किया, लेकिन इससे स्वयं की नई त्रुटियां हुईं। – Brian

+0

आप शायद एक टुकड़े के भीतर हैं और 'getActivity() प्राप्त करें। GetLayoutInflater() 'या' LayoutInflater.from (getActivity()) ' – Timmetje

2

जहाँ तक मुझे पता है कि आप सेटव्यू() में अपनी इच्छानुसार कुछ भी जोड़ सकते हैं। सकारात्मक/नकारात्मक बटन प्रभावित नहीं होंगे।

3

AlertDialog के लिए प्रदत्त दस्तावेज़ीकरण में आप AlertDialog के दृश्य में क्या सेट कर सकते हैं इस पर कोई प्रतिबंध नहीं हैं।

तो कस्टम दृश्य संवाद के शीर्षक के नीचे और उन बटनों के ऊपर अपना स्थान लेगा जो बिल्कुल प्रभावित नहीं होंगे।

0

प्रयास करते हैं, इस उदाहरण

android.support.v7.app.AlertDialog.Builder adb = 
    new android.support.v7.app.AlertDialog.Builder(YoreActivity.this); 

    ViewGroup subView = (ViewGroup) getLayoutInflater().// inflater view 
         inflate(R.layout.yore_layout_alert, null, false); 

    try {// set data of yore layout 

    ((TextView) subView.findViewById(R.id.messageAlert))//get element TextView 
              .setText(SomeText);//set text 

    } catch (NullPointerException npe) { 
    npe.printStackTrace(); 
    } 

    adb.setPositiveButton("textPOSITIVE", new DialogInterface.OnClickListener() {//one method go 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO some code 
    } 
    });//one method end 

    final android.support.v7.app.AlertDialog alertDialog = 
     adb.setTitle(SomeText)// set ttile 
     .setView(subView).create();// add view in AlertDialog.Builder, and create AlertDialog 

    try { //two method go 

    ((Button) subView.findViewById(R.id.customPositivButton)) 
    .setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     // TODO some code 
     alertDialog.dismiss(); 
     } 
    }); 

    } catch (NullPointerException npe) { 
    npe.printStackTrace(); 
    } //two method end 

    alertDialog.show(); //show in YoreActivity 
संबंधित मुद्दे