पुष्टि (हां / नहीं) डायलॉगप्रेशन कैसे लागू करें?


107

मैं एक वरीयता कैसे लागू कर सकता हूं जो एक साधारण हां / नो कन्फर्मेशन डायलॉग प्रदर्शित करता है?

एक उदाहरण के लिए, देखें Browser->Setting->Clear Cache

जवाबों:


292

यह एक सरल चेतावनी संवाद है , फेडेरिको ने आपको एक साइट दी है जहां आप चीजों को देख सकते हैं।

यहां एक संक्षिप्त उदाहरण है कि एक चेतावनी संवाद कैसे बनाया जा सकता है।

new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Do you really want to whatever?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {
        Toast.makeText(MainActivity.this, "Yaay", Toast.LENGTH_SHORT).show();
    }})
 .setNegativeButton(android.R.string.no, null).show();

3
मुझे पता है कि डायलॉग कैसे बनाया जाता है, लेकिन वरीयताओं के बारे में मेरा क्यू।
sh1ng

1
आपका सवाल वरीयता के बारे में है? ठीक है। यहाँ देखिए: kaloer.com/android-preferences
Maalte

1
मैंने इस स्रोत को पहले ही पढ़ लिया है। मैं OnClick को सब्सक्राइब किए गए कस्टम प्राथमिकता बना सकता हूं और इसे संभाल सकता हूं, लेकिन क्या यह सबसे आसान तरीका है?
14

मुझे ऐसा लगता है, कम से कम मुझे कोई अन्य तरीका नहीं पता है जो आसान हो।
Maaltete

1
आयात android.support.v7.app.AlertDialog का उपयोग करें; एक विषय के बिना बेहतर देखने के लिए
माजूरगेटर्टन

9

एंड्रॉइड एक बिल्ट-इन YesNoPreference क्लास के साथ आता है जो वास्तव में वही करता है जो आप चाहते हैं (हाँ और कोई विकल्प के साथ एक पुष्टिकरण संवाद)। आधिकारिक स्रोत कोड यहाँ देखें ।

दुर्भाग्य से, यह com.android.internal.preferenceपैकेज में है, जिसका अर्थ है कि यह एंड्रॉइड के निजी एपीआई का एक हिस्सा है और आप इसे अपने एप्लिकेशन से एक्सेस नहीं कर सकते हैं (निजी एपीआई कक्षाएं बिना सूचना के परिवर्तन के अधीन हैं, इसलिए Google आपको उन्हें एक्सेस नहीं करने का कारण बताता है)।

समाधान: मेरे द्वारा दिए गए लिंक से आधिकारिक स्रोत कोड को कॉपी / पेस्ट करके अपने आवेदन के पैकेज में कक्षा को फिर से बनाएं। मैंने यह कोशिश की है, और यह ठीक काम करता है (कोई कारण नहीं है कि यह नहीं होना चाहिए)।

फिर आप इसे preferences.xmlकिसी भी अन्य पसंद की तरह जोड़ सकते हैं । उदाहरण:

<com.example.myapp.YesNoPreference
    android:dialogMessage="Are you sure you want to revert all settings to their default values?"
    android:key="com.example.myapp.pref_reset_settings_key"
    android:summary="Revert all settings to their default values."
    android:title="Reset Settings" />

जो इस तरह दिखता है:

स्क्रीनशॉट


1
महान समाधान! लेकिन इस वर्ग के निर्माणकर्ताओं में से एक के साथ एक समस्या है! यह एक संसाधन Attr (com.android.internal.R.attr.yesNoPreferenceStyle) का संदर्भ देता है! जिसे हल नहीं किया जा सकता है। वर्कअराउंड क्या है? क्या मुझे अपने प्रोजेक्ट में एक बनाना होगा?!
पुनर्वसन

3

इरादे वरीयता का उपयोग करें यदि आप वरीयता xml स्क्रीन का उपयोग कर रहे हैं या यदि आप कस्टम स्क्रीन का उपयोग कर रहे हैं तो कोड नीचे की तरह होगा

intentClearCookies = getPreferenceManager().createPreferenceScreen(this);
    Intent clearcookies = new Intent(PopupPostPref.this, ClearCookies.class);

    intentClearCookies.setIntent(clearcookies);
    intentClearCookies.setTitle(R.string.ClearCookies);
    intentClearCookies.setEnabled(true);
    launchPrefCat.addPreference(intentClearCookies);

और फिर एक्टिविटी क्लास कुछ हद तक नीचे की तरह बनाएं, विभिन्न लोगों के रूप में विभिन्न दृष्टिकोण आप किसी भी दृष्टिकोण का उपयोग कर सकते हैं जैसे कि यह सिर्फ एक उदाहरण है।

public class ClearCookies extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    showDialog();
}

/**
 * @throws NotFoundException
 */
private void showDialog() throws NotFoundException {
    new AlertDialog.Builder(this)
            .setTitle(getResources().getString(R.string.ClearCookies))
            .setMessage(
                    getResources().getString(R.string.ClearCookieQuestion))
            .setIcon(
                    getResources().getDrawable(
                            android.R.drawable.ic_dialog_alert))
            .setPositiveButton(
                    getResources().getString(R.string.PostiveYesButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here

                        }
                    })
            .setNegativeButton(
                    getResources().getString(R.string.NegativeNoButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here
                        }
                    }).show();
}}

जैसा कि पहले बताया गया है कि ऐसा करने के कई तरीके हैं। यह एक तरीका है जिससे आप अपना कार्य कर सकते हैं, कृपया उत्तर स्वीकार करें यदि आपको लगता है कि आपको वह मिल गया है जो आप चाहते थे।


धन्यवाद! यह लगभग वही है जो मुझे अपने ऐप के लिए चाहिए था क्योंकि मैं एक सेवा से संवाद को ट्रिगर कर रहा हूं और मेरे मामले में मुझे संवाद की मेजबानी के लिए एक गतिविधि की आवश्यकता है।
राल्फ रीटोच

इसे प्यार करना। IMHO क्रिया, लेकिन स्वीकृत और सही तरीका
जॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.