سؤال

لدي تفضيلان - عنوان الأغنية وحالة الصوت (كتم الصوت أو مستوى الصوت) اللذين أريد تخزينهما في نفس المفتاح.يعمل هذا مع النقرات والمشكلة الوحيدة التي أواجهها هي إعادة تعيين الملخص على 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;
}
هل كانت مفيدة؟

المحلول

يقول المستندات أنه يمكنك استدعاء FindPreefery من الأول للحصول على الثانية

يمكنك ولكن كنت تفعل ذلك خطأ.لا تزال تتصل بالرد على الشاشة الرئيسية.

تحتاج إلى الاتصال صراحة على شاشة التفضيلات المسترجع، كما تريد التفسير هذا أكثر من ذلك.

giveacodicetagpre.

نصائح أخرى

لم أتمكن من جعله يعمل بشكل صحيح باستخدام 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
}

أنت تمر بزيادة godyodicetagcode إلى suptummary ()، والذي يتوقع guardaceticetagcode.من المحتمل أن تحصل على الخطأ لأنك تخلصك لتكون عاملا.مجرد التخمين هنا، يبدو أن هناك في عداد المفقودين بعض الكود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top