【问题标题】:With android I want to have 2 preferences with the same key使用 android 我希望有 2 个具有相同键的首选项
【发布时间】:2010-07-15 08:07:16
【问题描述】:

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

【问题讨论】:

    标签: android listpreference preferencescreen


    【解决方案1】:

    我无法通过使用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
    }
    

    【讨论】:

      【解决方案2】:

      文档说你可以在第一个调用 findPreference 来获得第二个

      你可以,但你做错了。您仍然在主屏幕上调用 find。

      您需要在检索到的首选项屏幕上显式调用,因为您想进一步分析它。

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

      【讨论】:

      • 该行在 Eclipse 中没有错误,但该行会引发转换错误。 java.lang.ClassCastException: android.preference.PreferenceScreen 第一个首选项是一个 PreferenceScreen,它使用意图加载 sdcard 上的所有歌曲。第二个是一个简单的 ListPreference,它只返回默认、音乐或静音三种状态中的一种。
      • 发布您的首选项屏幕布局。
      • 好的,我做到了。我可以向 SharedPrefs 添加一些首选项键并以不同的方式执行此操作。只是代码运行良好,我做的最后一件事是在 onSharedPreferencesChanged 中设置摘要。我还需要在那里更新 setEntryValues。
      【解决方案3】:

      您将Object 传递给setSummary(),它需要int。您可能会收到错误,因为您将其转换为int。这里随便猜,好像少了一些代码。

      【讨论】:

        猜你喜欢
        • 2017-11-26
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        相关资源
        最近更新 更多