2016-07-08 4 views
0

Существует много вопросов о сохранении состояния переключателей в общих настройках, но ни одно из них не обеспечивает решение, которое я ищу.Как хранить и получать доступ к радиолампам из общих настроек?

Я создаю 15 групп радиостанций и 4 радиокнопки внутри каждой группы радиосвязи в цикле for. Группы радио имеют уникальный идентификатор от 1 до 15 и переключатели имеют идентификаторы в пределах от 100 до 159.

Это код, я использую, чтобы сохранить радио кнопки ID:

public void saveArray(int[] array, String arrayName) { 
    SharedPreferences prefs = getActivity().getSharedPreferences("preferencename", 0); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putInt(arrayName +"_size", array.length); 
    for(int i=0;i<array.length;i++) { 
     editor.putInt(arrayName + "_" + i, array[i]); 
    } 
    editor.commit(); 
} 

array содержит уникальный идентификатор всех этих переключателей, которые были проверены, и я протестировал вышеуказанный код, он работает отлично, но проблема в том, что я не могу получить к нему доступ.

Это код, который я использую для извлечения кнопки радио ID:

public void loadArray(String arrayName, Context mContext) { 
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0); 
    int size = prefs.getInt(arrayName + "_size", 0); 
    int array[] = new int[size]; 
    for(int i=0;i<size;i++) { 
     array[i] = prefs.getInt(arrayName + "_" + i, 0); 

    } 
} 

Like saveArray, loadArray также работает. Массив заполнен правильными идентификаторами кнопок. Проблема начинается сейчас - я не могу получить доступ к этим радио-кнопки, я не могу сделать findViewById() потому, что доступен только в onCreateView()

Так что это не будет работать внутри loadArray

for(int i=0; i<size; i++) { 
     RadioButton radio1 = (RadioButton) findViewById(array[i]); 
    } 

Возможное решение для findViewById хранит представления в onCreateView() и затем обращается к нему позже. Так что я создал массив Radio Button

RadioButton[] allRadio = new RadioButton[15]; 

Теперь внутри onCheckedChanged, я добавляю выбранные радиокнопок массива:

public void onCheckedChanged(RadioGroup radioGroup, int i) { 
     RadioButton radio = (RadioButton) rootView.findViewById(i); 
     String selectedValue = radio.getText().toString(); 
     allRadio[radioGroup.getId()-1] = radio; 
} 

Приведенный выше код прекрасно сохраняет радиокнопки внутри массива, но теперь Я не могу их спасти! Вы можете хранить int, string и т. Д. В общих настройках, но не с помощью переключателей! Решением этого может быть сохранение идентификатора кнопки пульта, но тогда та же проблема начнется снова, что findViewById() недоступен.

ответ

0
public void loadArray(String arrayName, Context mContext) { 
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0); 
    int size = prefs.getInt(arrayName + "_size", 0); 
    int array[] = new int[size]; 
    for(int i=0;i<size;i++) { 
     array[i] = prefs.getInt(arrayName + "_" + i, 0); 
//->put Toast here and check whether your are getting the id's or not. If you 
//->are getting it, return arrays of id back to calling method 
    } 
} 
+0

Ну, вы сделали это так просто. Возвращение массива получило трюк, спасибо! –

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