2014-09-15 3 views
0

Я так долго пытаюсь выяснить, как изменить выбор в предпочтении списка, без того, чтобы пользователь действительно делал это. Мне нужно сделать метод, который случайным образом выбирает один из параметров в списке предпочтений. Это будет сделано, только если установлен флажок «рандомизировать». В этой части я могу нормально работать, но это реальная рандомизация, которая не работает. Вот что у меня есть:Программно меняющийся выбор предпочтений списка

Вот Предпочтение списка

<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(); 
} 
+0

Невозможно проверить это на данный момент. Измените 'if (random == curr)' to 'if (random.equals (curr))'. И объявите оператор return, иначе он вызовет редактор еще раз. Большая вероятность того, что первый ток снова вставлен, тогда, когда стек раскрутится. – greenapps

+0

Скажите, пожалуйста, какие значения могут получить idx в 'int idx = new Random(). NextInt (6);'? – greenapps

+0

случайное целое число от 0 до 6, не считая 6 – jxn

ответ

0
Set<String> locs = preferences.getStringSet("location_preference", null); 

Там нет stringset для android:key="location_preference" там. Существует только одна строка:

String location = preferences.getString("location_preference", null; 

Вы должны получить все строки из вашего предопределенного массива android:entryValues="@array/locationValues" и принимать один случайным образом из них и сохранить один в «location_preference».

+0

Оказалось, чтобы показать, как это сделать? – jxn

+0

Нет. Попробуйте сами. Если у вас проблемы, отправьте его код, и мы увидим. – greenapps

+0

Я что-то пробовал, посмотрю, работает ли он и отчитается. – jxn

Смежные вопросы