С андроидом хочу иметь 2 предпочтения с одинаковым ключом - PullRequest
2 голосов
/ 15 июля 2010

У меня есть 2 префы - название песни и состояние звука (приглушение или громкость), которые я хочу сохранить в одной и той же клавише.Это работает для кликов, и единственная проблема, с которой я сталкиваюсь - это сброс сводки на onSharedPreferencesChanged. Я получаю ошибки с этим.

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

, потому что второй вызов findPreference возвращает первый префВ документах говорится, что вы можете вызвать findPreference для первого, чтобы получить второе, но это разные типы префов, и я получаю ошибку приведения.Есть ли другой способ найти ListPreference, чтобы я мог сбросить значения ввода в списке?

РЕДАКТИРОВАТЬ: Вот макет

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

Ответы [ 3 ]

1 голос
/ 06 декабря 2016

Я не могу заставить его работать должным образом, используя findPreference.

Тем не менее, PreferenceGroup имеет методы для перебора всех параметров внутри:

  • getPreferenceCount()
  • getPreference(int index)

Поэтому я просто написал метод, который перебирает все предпочтения в группе и возвращает только предпочтения с заданным ключом:

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
}
0 голосов
/ 08 августа 2012

вы передаете Object в setSummary (), который ожидает int. Вы, вероятно, получаете ошибку, потому что вы ее называете int. Просто догадываюсь здесь, кажется, отсутствует какой-то код.

0 голосов
/ 15 июля 2010

В документах говорится, что вы можете вызвать findPreference первого, чтобы получить второе

Можно, но вы делаете это неправильно.Вы по-прежнему вызываете функцию поиска на главном экране.

Вам необходимо явно позвонить на восстановленном экране предпочтений, так как вы хотите анатомировать это далее.

...