Восстановление значений View onResume для фрагмента - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...