2017-08-06 6 views
4

私はMultiSelectListPreferenceを持つAndroidアプリを持っており、onPreferenceChange()メソッドを使用して設定の要約を更新しています。私は、newValuesパラメータに基づいて要約を更新するコードを書くことに成功しましたが、オブジェクトの内容はユーザーが選択した実際のオプションと一致しません。MultiSelectListPreference onPreferenceChange()メソッドが間違ったパラメータを取得しています

public boolean onPreferenceChange(Preference preference, Object newValue) { 
    if (preference instanceof MultiSelectListPreference) { 
     List<String> newValues = new ArrayList<>((HashSet<String>) newValue); 

     MultiSelectListPreference pref = (MultiSelectListPreference) preference; 
     ArrayList<String> newSummary = new ArrayList<>(); 

     ArrayList<CharSequence> values = new ArrayList<>(Arrays.asList(pref.getEntryValues())); 

     for (int i = 0; i < newValues.size(); i++) { 
      int currentIndex = findIndexOfString(values, newValues.get(i).replaceAll(" ", "")); 

      String title = (currentIndex >= 0) ? pref.getEntries()[currentIndex].toString().replaceAll(" ", "") : ""; 

      newSummary.add(title); 
     } 

     pref.setSummary(TextUtils.join(", ", newSummary)); 
    } 

    return true; 
} 

private static int findIndexOfString(List<CharSequence> list, String s) { 
    for (int i = 0; i < list.size(); i++) { 
     if (s.equals(list.get(i).toString().replaceAll(" ", ""))) { 
      return i; 
     } 
    } 

    return -1; 
} 

答えて

1

これは好みとして格納された値が含まれていonPreferenceChange()から受け取った私はnewValueオブジェクトに基づいて要約を設定するために使用しているコードは、次のとおりです。

は、ここに私のコードです。 (要約には役に立たない)

関連する問題