android java - Come aprire o simulare un clic su un Android Preferenza, creato con XML, a livello di programmazione?




4 Answers

Potresti avere ListPreference esteso per creare la tua finestra di dialogo, quindi includere il tuo metodo pubblico che chiama il metodo showDialog protetto di ListPreference. Qualcosa di simile a:

public void show()
{
    showDialog(null);
}

In questo modo non ti imbatterai nel problema di getOrder () che non funziona quando ci sono PreferenceGroups dato che diverse persone hanno indicato nei commenti la tua risposta.

Questo può essere fatto con qualsiasi tipo di preferenza che abbia un metodo showDialog protetto.

key app

Ho un'applicazione Android con le preferenze dichiarate in XML, caricate con addPreferencesFromResource . L'utente può aprire le preferenze, fare clic su ciascun elemento e modificarle, tutto funziona.

Una delle preferenze che ho è:

        <ListPreference android:key="abc"
            android:title="@string/abc"
            android:summary="@string/cde"
            android:persistent="true"/>

Come posso mostrare automaticamente la finestra di dialogo delle preferenze a un utente (senza che l'utente debba andare alla schermata delle preferenze e fare clic su di esso?).

Ho provato ( (android.preference.DialogPreference) prefMgr.findPreference( "abc" )).showDialog(null) , ma si dice che è un metodo protetto ...? Chiamato dalla mia attività principale (che è una PreferenceActivity ), è per questo che ovviamente non può funzionare. Ma come altro?

MODIFICARE

Ho appena trovato due thread ( 1 e 2 ) con l'idea di usare findViewById per accedere alle preferenze, ma senza successo. Restituisce sempre null (fa anche per me).

Sembra che non ci sia davvero alcuna possibilità di farlo dal codice.




 PreferenceScreen preferenceScreen  = (PreferenceScreen) findPreference("pref_key");
    final ListAdapter listAdapter = preferenceScreen.getRootAdapter();
         EditTextPreference editPreference = (EditTextPreference)   findPreference("set_password_preference");

    final int itemsCount = listAdapter.getCount();
    int itemNumber;
    for (itemNumber = 0; itemNumber < itemsCount; ++itemNumber) {
        if (listAdapter.getItem(itemNumber).equals(editPreference)) {
            preferenceScreen.onItemClick(null, null, itemNumber, 0);
            break;
        }
    }
     }
 }  






ciao amici prova questo codice funziona bene

getPreferenceManager().findPreference("YOUR PREF_KEY").setOnPreferenceClickListener(new OnPreferenceClickListener()
        {
            public boolean onPreferenceClick(Preference preference)
            {

                //your code here
                return true;
            }
        });



Related