Onay (evet / hayır) DialogPreference nasıl uygulanır?


Yanıtlar:


292

Bu basit bir uyarı diyaloğu , Federico size her şeyi arayabileceğiniz bir site verdi.

İşte bir uyarı iletişim kutusunun nasıl oluşturulabileceğine dair kısa bir örnek.

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
Nasıl Diyalog oluşturacağımı biliyorum, ama tercihler hakkında q'm.
sh1ng

1
Sorunuz tercihlerle mi ilgili? Tamam. Buraya bir göz atın: kaloer.com/android-preferences
Maaalte

1
Bu kaynağı zaten okudum. OnClick'e abone olan özel Tercihler oluşturabilir ve bunu halledebilirim, ancak bu en kolay yol mu?
sh1ng

Sanırım öyle, en azından bunun daha kolay başka bir yolunu bilmiyorum.
Maaalte

1
import android.support.v7.app.AlertDialog'u kullanın; temasız daha iyi bir görünüm için
temasız majurageer15

9

Android, tam olarak istediğiniz şeyi yapan yerleşik bir YesNoPreference sınıfıyla birlikte gelir (evet ve hayır seçenekleriyle bir onaylama iletişim kutusu). Resmi kaynak koduna buradan bakın .

Maalesef, com.android.internal.preferencepaketin içindedir, yani Android'in özel API'lerinin bir parçasıdır ve uygulamanızdan ona erişemezsiniz (özel API sınıfları önceden haber verilmeksizin değiştirilebilir, bu nedenle Google'ın bunlara erişmenize izin vermemesinin nedeni budur).

Çözüm: Sağladığım bağlantıdan resmi kaynak kodunu kopyalayıp / yapıştırarak uygulamanızın paketindeki sınıfı yeniden oluşturun. Bunu denedim ve iyi çalışıyor (olmaması için hiçbir neden yok).

Daha sonra bunu preferences.xmldiğer Tercihlerinize ekleyebilirsiniz . Misal:

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

Şuna benzeyen:

ekran görüntüsü


1
Harika çözüm! Ancak bu sınıfın kurucularından birinde bir sorun var! Bir özkaynağa başvuruyor (com.android.internal.R.attr.yesNoPreferenceStyle)! Çözülemeyen. Çözüm nedir? Kendi projemde bir tane oluşturmam gerekiyor mu ?!
reubenjohn

3

Tercih xml ekranını kullanıyorsanız veya size özel ekranı kullanıyorsanız, Amaç Tercihini kullanın, o zaman kod aşağıdaki gibi olacaktır

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

Ve sonra aşağıdaki gibi Aktivite Sınıfı Oluşturun, Farklı insanlar olarak farklı bir yaklaşım olarak, istediğiniz herhangi bir yaklaşımı kullanabilirsiniz, bu sadece bir örnektir.

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

Daha önce de söylendiği gibi, bunu yapmanın birçok yolu vardır. bu, görevinizi yapmanın yollarından biridir, lütfen istediğinizi aldığınızı düşünüyorsanız yanıtı kabul edin.


Teşekkürler! Bir hizmetten iletişim kutusunu tetiklediğimden ve benim durumumda iletişim kutusunu barındırmak için bir etkinliğe ihtiyacım olduğundan neredeyse tam olarak uygulamam için ihtiyacım olan şey bu.
Ralph Ritoch

Sevdim. Ayrıntılı IMHO, ancak onaylanmış ve doğru yol
John
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.