У меня есть 9 фрагментов, между которыми я переключаюсь с помощью навигации по вкладкам в своей деятельности. В каждом методе onPause этих фрагментов я сохраняю все значения EditText, Spinner и CheckBox в своей базе данных. Затем для каждого метода onResume каждого из этих фрагментов я извлекаю эти значения из базы данных и заполняю их значениями EditTexts, Spinners и CheckBoxes. Я проверил значения в методах onPause и onResume, и они правильно хранятся и извлекаются. Я не уверен, почему состояние пользовательского интерфейса не создается правильно. EditTexts и Spinner загружаются правильно, но флажки иногда не будут отмечены, когда я переключаюсь между фрагментами. Я скучаю по чему-то особенному для фрагментов, потому что этот метод работает на все мои другие действия? Насколько я знаю, метод onResume - последний, который вызывается при повторном открытии фрагмента.
В onPause я извлекаю объект из базы данных и вызываю функцию saveValuesToDB.
@Override
public void onPause() {
super.onPause();
// Get the structure from the DB corresponding to the values in the Shared Preferences
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.shared_preferences_filename), Context.MODE_PRIVATE);
final String project_name = sharedPref.getString("project_name","");
final String structure_topo_number = sharedPref.getString("structure_topo_number","");
returned_structure = null;
try {
Thread getStructure = new Thread(new Runnable() {
@Override
public void run() {
returned_structure = structureDB.structureDAO().getStructure(structure_topo_number,project_name);
}
});
getStructure.start();
getStructure.join();
} catch(Exception e){
returned_structure = null;
}
// Structure already exists in DB. Set its values equal to the current inputted values
if(returned_structure != null){
saveValuesToDB(returned_structure);
}
}
Затем в saveValuesToDB я устанавливаю значения объекта.
/* Save all currently entered values to the Database */
//region
public void saveValuesToDB(Structure structure){
structure_being_saved = structure;
// Measure Down Type
structure_being_saved.pipe_measure_down_types.set(5,pipe6_measure_down_type_spinner.getSelectedItem().toString());
// Measure Down
structure_being_saved.pipe_measure_downs.set(5,pipe6_measure_down_edit_text.getText().toString());
// Measure Down Angle
structure_being_saved.pipe_measure_down_angles.set(5,pipe6_measure_down_angle_edit_text.getText().toString());
// Pipe Material
structure_being_saved.pipe_materials.set(5,pipe6_material_spinner.getSelectedItem().toString());
}
И в onResume я снова загружаю объект и вызываю функцию setValuesFromDB
@Override
public void onResume() {
super.onResume();
// Get the structure from the DB corresponding to the values in the Shared Preferences
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.shared_preferences_filename), Context.MODE_PRIVATE);
final String project_name = sharedPref.getString("project_name","");
final String structure_topo_number = sharedPref.getString("structure_topo_number","");
returned_structure = null;
try {
Thread getStructure = new Thread(new Runnable() {
@Override
public void run() {
returned_structure = structureDB.structureDAO().getStructure(structure_topo_number,project_name);
}
});
getStructure.start();
getStructure.join();
} catch(Exception e){
returned_structure = null;
}
if(returned_structure != null){
setValuesFromDB(returned_structure);
}
latitude = 0.0;
longitude = 0.0;
}
//endregion
private void setValuesFromDB(Structure structure) {
current_structure = structure;
/* For all of the spinners, check if the position of the item from the DB is not null */
// Measure Down Type
if (pipe6_measure_down_type_spinner_adapter.getPosition(current_structure.pipe_measure_down_types.get(5)) != -1) {
pipe6_measure_down_type_spinner.setSelection(pipe6_measure_down_type_spinner_adapter.getPosition(current_structure.pipe_measure_down_types.get(5)));
} else {
pipe6_measure_down_type_spinner.setSelection(0);
}
// Measure Down
pipe6_measure_down_edit_text.setText(current_structure.pipe_measure_downs.get(5));
pipe6_measure_down_edit_text.setSelection(pipe6_measure_down_edit_text.getText().length());
// Measure Down Angle
// If the value from the DB is blank, default it to 90
if (current_structure.pipe_measure_down_angles.get(5).equals("")) {
pipe6_measure_down_angle_edit_text.setText("90");
} else {
pipe6_measure_down_angle_edit_text.setText(current_structure.pipe_measure_down_angles.get(5));
}
pipe6_measure_down_angle_edit_text.setSelection(pipe6_measure_down_angle_edit_text.getText().length());
// Pipe Material
if (pipe6_material_spinner_adapter.getPosition(current_structure.pipe_materials.get(5)) != -1) {
pipe6_material_spinner.setSelection(pipe6_material_spinner_adapter.getPosition(current_structure.pipe_materials.get(5)));
} else {
pipe6_material_spinner.setSelection(0);
}
}