Domanda

Ho 2 prefs - un titolo di brano e lo stato audio (muto o volume) che voglio memorizzare nello stesso tasto.Funziona per i clic e l'unico problema che ho reimpostato il riepilogo su onsharedpreferenceschanged ottengo errori con questo.

PreferenceScreen musicPrefScreen = (PreferenceScreen)getPreferenceScreen
        ().findPreference("theme" + Team_ID); 
musicPrefScreen.setSummary(mPreferences.getString("theme" + 
        Team_ID, "CantGetTeam")); 
ListPreference audiostatePref = (ListPreference)getPreferenceScreen()
        .findPreference("theme" + Team_ID);
audiostatePref.setSummary(AudioState); 
audiostatePref.setEntryValues(audiostates_values);
.

Perché la seconda chiamata a FindPreference restituisce il primo pref.I Documenti dicono che puoi chiamare FindPreference sul primo a ottenere il secondo ma sono diversi tipi di pref sono e ottengo un errore fuso.C'è un altro modo per trovare la libertà di listino in modo da poter ripristinare i valori di ingresso nell'elenco?

Modifica: Ecco il layout

public PreferenceScreen createPreferenceHierarchy() { 
    PreferenceScreen prefScreenRoot = getPreferenceManager().createPreferenceScreen(this);

    PreferenceCategory TeamCategory = new PreferenceCategory(this); 
    TeamCategory.setTitle("Team " + Team_ID + " Settings"); 
    prefScreenRoot.addPreference(TeamCategory);
        // set team name
        EditTextPreference teamnamePref = new EditTextPreference(this);  
        teamnamePref.setTitle("Team Name"); 
        teamnamePref.setKey( "team" + Team_ID );
        teamnamePref.setSummary(TheTeamName); 
        teamnamePref.setDialogTitle("Enter Name For Team " + Team_ID);
        teamnamePref.setDefaultValue(TheTeamName);
        teamnamePref.getEditText().setSingleLine(true);
        TeamCategory.addPreference(teamnamePref);   

        // select theme music
        PreferenceScreen musicPrefScreen = getPreferenceManager().createPreferenceScreen(this); 
        Intent musicIntent = new Intent(this, MusicDroid.class); 
        musicIntent.putExtra( "team_id", Team_ID);  
        musicPrefScreen.setIntent(musicIntent); 
        musicPrefScreen.setKey( "theme" + Team_ID );
        musicPrefScreen.setTitle("Theme Music"); 
        musicPrefScreen.setSummary(TheThemeName); 
        TeamCategory.addPreference(musicPrefScreen);  

        // select audio state
        ListPreference audiostatePref = new ListPreference(this);
        audiostatePref.setTitle("Audio State"); 
        audiostatePref.setKey( "theme" + Team_ID );
        audiostatePref.setSummary(AudioState); // 
        audiostatePref.setEntries(audiostates);
        audiostatePref.setEntryValues(audiostates_values);
        TeamCategory.addPreference(audiostatePref); 

    return prefScreenRoot;
}
.

È stato utile?

Soluzione

.

I Documenti dicono che puoi chiamare FindPreference sul primo a ottenere il secondo

puoi ma lo stai sbagliando.Hai ancora chiamato Trova sulla schermata principale.

È necessario chiamare esplicitamente sulla schermata di preferenza recuperata, come si desidera anatomizzare che ulteriormente.

ListPreference audiostatePref = (ListPreference)musicPrefScreen.findPreference("theme" + Team_ID);
.

Altri suggerimenti

Non potevo farlo funzionare correttamente usando findPreference.

Tuttavia, PreferenceGroup ha metodi per iterati attraverso tutte le preferenze all'interno:

    .
  • getPreferenceCount()
  • getPreference(int index)

Quindi ho semplicemente scritto un metodo, che itera attraverso tutte le preferenze nel gruppo e restituisce solo le preferenze con la chiave data:

private List<Preference> findPreferences(PreferenceGroup group, String key) {
    List<Preference> prefs = new ArrayList<>();
    for (int index = 0; index < group.getPreferenceCount(); index++) {
        Preference pref = group.getPreference(index);
        if (key.equals(pref.getKey())) {
            prefs.add(pref);
        }
    }
    return prefs
}
.

Stai passando un Object a setSummary (), che si aspetta un int.Probabilmente stai ricevendo l'errore perché lo hai gettato per essere un int.Solo indovinando qui, sembra che ci sia manca un codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top