Я так долго пытаюсь выяснить, как изменить выбор в предпочтении списка, без того, чтобы пользователь действительно делал это. Мне нужно сделать метод, который случайным образом выбирает один из параметров в списке предпочтений. Это будет сделано, только если установлен флажок «рандомизировать». В этой части я могу нормально работать, но это реальная рандомизация, которая не работает. Вот что у меня есть:Программно меняющийся выбор предпочтений списка
Вот Предпочтение списка
<ListPreference
android:key="location_preference"
android:title="@string/location"
android:summary="@string/location_summary"
android:entries="@array/locations"
android:entryValues="@array/locationValues"
android:defaultValue="Canyon"
android:dialogTitle="@string/location" />
и вот метод, который я придумал для рандомизации выделение на
protected static void setRandomLocation(Context context){
SharedPreferences preferences = getPreferences(context);
Set<String> locs = preferences.getStringSet("location_preference", null);
int idx = new Random().nextInt(locs.toArray().length);
String random = (String) (locs.toArray()[idx]);
preferences.edit().putString("location_preference", random);
preferences.edit().commit();
}
private static SharedPreferences getPreferences(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
Что я делаю неправильно/как я должен сделать это?
EDIT: Итак, я попробовал следующее, чтобы исправить это, и это не сработало.
protected static void setRandomLocation(Context context){
Resources res = context.getResources();
SharedPreferences preferences = getPreferences(context);
String curr = preferences.getString("location_preference", null);
int idx = new Random().nextInt(res.getStringArray(R.array.locationValues).length);
String random = (String) (res.getStringArray(R.array.locationValues)[idx]);
if(random == curr)
setRandomLocation(context);
preferences.edit().putString("location_preference", random);
preferences.edit().commit();
}
Невозможно проверить это на данный момент. Измените 'if (random == curr)' to 'if (random.equals (curr))'. И объявите оператор return, иначе он вызовет редактор еще раз. Большая вероятность того, что первый ток снова вставлен, тогда, когда стек раскрутится. – greenapps
Скажите, пожалуйста, какие значения могут получить idx в 'int idx = new Random(). NextInt (6);'? – greenapps
случайное целое число от 0 до 6, не считая 6 – jxn