我有 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 返回第一个 Pref。文档说你可以在第一个上调用 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;
}
最佳答案
我无法使用 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
}
关于android - 使用 android 我希望有 2 个首选项具有相同的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253616/