Bagaimana cara menerapkan DialogPreference konfirmasi (ya / tidak)?

Jawaban:

292

Itu adalah dialog peringatan sederhana , Federico memberi Anda situs tempat Anda dapat mencari sesuatu.

Berikut adalah contoh singkat bagaimana dialog peringatan dapat dibuat.

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();
Maaalte
sumber
3
Saya tahu bagaimana membangun Dialog, tapi q saya tentang preferensi.
sh1ng
1
Pertanyaan Anda adalah tentang preferensi? Baik. Lihat di sini: kaloer.com/android-preferences
Maaalte
1
Saya sudah membaca sumber ini. Saya dapat membuat Preferensi kustom dengan berlangganan OnClick dan menanganinya, tetapi apakah ini cara termudah?
sh1ng
Saya rasa begitu, setidaknya saya tidak tahu cara lain yang lebih mudah.
Maaalte
1
gunakan import android.support.v7.app.AlertDialog; untuk tampilan yang lebih baik tanpa tema
majurageerthan
9

Android hadir dengan kelas YesNoPreference bawaan yang melakukan apa yang Anda inginkan (dialog konfirmasi dengan opsi ya dan tidak). Lihat kode sumber resminya di sini .

Sayangnya, ini ada dalam com.android.internal.preferencepaket, yang berarti itu adalah bagian dari API pribadi Android dan Anda tidak dapat mengaksesnya dari aplikasi Anda (kelas API pribadi dapat berubah tanpa pemberitahuan, itulah alasan mengapa Google tidak mengizinkan Anda mengaksesnya).

Solusi: cukup buat ulang kelas dalam paket aplikasi Anda dengan menyalin / menempel kode sumber resmi dari tautan yang saya berikan. Saya sudah mencoba ini, dan berfungsi dengan baik (tidak ada alasan mengapa tidak boleh).

Anda kemudian dapat menambahkannya preferences.xmlseperti Preferensi lainnya. Contoh:

<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" />

Yang terlihat seperti ini:

tangkapan layar

XåpplI'-I0llwlg'I -
sumber
1
Solusi bagus! Tetapi ada masalah dengan salah satu konstruktor kelas ini! Ini merujuk pada atribut sumber daya (com.android.internal.R.attr.yesNoPreferenceStyle)! Yang tidak bisa diselesaikan. Apa solusinya? Apakah saya harus membuatnya di proyek saya sendiri ?!
reubenjohn
3

Gunakan Preferensi Intent jika Anda menggunakan layar xml preferensi atau Anda jika Anda menggunakan layar kustom Anda maka kodenya akan seperti di bawah ini

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);

Dan kemudian Buat Kelas Aktivitas seperti di bawah ini, Sebagai orang yang berbeda sebagai pendekatan yang berbeda, Anda dapat menggunakan pendekatan apa pun yang Anda suka ini hanyalah sebuah contoh.

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();
}}

Seperti yang diceritakan sebelumnya, ada beberapa cara untuk melakukan ini. ini adalah salah satu cara Anda dapat melakukan tugas Anda, terimalah jawabannya jika Anda merasa telah mendapatkan apa yang Anda inginkan.

PravinDodia
sumber
Terima kasih! Ini hampir persis seperti yang saya butuhkan untuk aplikasi saya karena saya memicu dialog dari layanan dan dalam kasus saya, saya memerlukan aktivitas untuk menghosting dialog.
Ralph Ritoch
Suka. IMHO verbose, tapi disetujui dan cara yang benar
John