मेरे पास फ़ंक्शन के साथ संवाद के लिए उपयोग वर्ग है:

public static void buildCustomDialog(Context contextRef, View dialogContentView)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(contextRef);

    builder.setView(dialogContentView);

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null);

    AlertDialog dialog = builder.create();

    dialog.show();

}

और जो दृश्य मैं पास करता हूं उसमें क्लिकलिस्टर्स के साथ दो बटन होते हैं। सब कुछ बढ़िया काम करता है सिवाय इसके कि जब उपयोगकर्ता कस्टम बटनों में से किसी एक पर क्लिक करता है तो मैं संवाद को खारिज नहीं कर सकता। तो वे दूसरे पृष्ठ पर नेविगेट करते हैं, वापस हिट करते हैं और संवाद अभी भी वहां है।

मैं संवाद करने से पहले मेरे द्वारा बनाए जा रहे कस्टम क्लिक श्रोताओं में संवाद का संदर्भ कैसे प्राप्त कर सकता हूं?

मैंने हर कल्पनीय विकल्प की कोशिश की है। मेरा नवीनतम प्रयास एक कस्टम इंटरफ़ेस के साथ एक कस्टम डायलॉगफ्रैगमेंट बनाना है, लेकिन फिर भी, अलर्टडिअलॉग बिल्डर संवाद बनाने से पहले दृश्य (और इसलिए बटन और उनके श्रोता) बन जाते हैं।

मुझे लगता है कि यह बहुत आसान होना चाहिए और मुझे कुछ याद आ रहा है ...

5
MayNotBe 15 सितंबर 2017, 20:26

3 जवाब

सबसे बढ़िया उत्तर

आपको अपने कस्टम बटन पर onClick श्रोता सेट करना होगा।

इसे आजमाएं:

   AlertDialog.Builder builder = new AlertDialog.Builder(contextRef);

    builder.setView(dialogContentView);

    Button btnOk= (Button) dialogContentView.findViewById(R.id.btn_ok);

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null);

    AlertDialog dialog = builder.create();

    dialog.show();

    btnOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });

इतना ही !!

10
Mayank Sharma 15 सितंबर 2017, 20:38

आसान। वापसी संवाद संदर्भ, इसे इकट्ठा करें जहां आप इस विधि का आह्वान करते हैं। अपने खारिज बटन श्रोता में जांचें कि यदि संवाद संदर्भ में वैध वस्तु है। यदि हाँ तो इस संवाद को खारिज कर दें।

0
Rachit Solanki 15 सितंबर 2017, 20:44

कोटलिन में कुछ इस तरह (एंको डायलॉग्स का उपयोग करके) यह कस्टम लेआउट में बटनों की सूची दिखाता है, प्रत्येक डायलॉग बंद करता है:

    private var closeDialogAction: () -> Unit = {}

    private fun showDialog(greetings: List<Greeting>) {
        val alert = context.alert {
            customView {
                verticalLayout {
                    greetings.forEach {
                        textView {                                 
                            text = it.name
                            setOnClickListener {
                                // Make some other necessary actions
                                closeDialogAction()
                            }
                        }
                    }
                }
            }
        }.build()

        closeDialogAction = {alert.dismiss()}

        alert.show()
    }
0
Александр Бабич 3 अप्रैल 2019, 13:06