Из таблицы SQLite достаются устаревшие данные, хотя обновление данных в таблице прошло успешно

У меня есть два фрагмента: в первом находится recycler view, во втором отображается вся информация по объекту и есть возможность его редактирования. Во втором фрагменте я делаю обновление данных в бд в методе onPause(), при первом переходе на первый фрагмент данные в recycler view не изменяются, при втором переходе на первый фрагмент данные обновляются. Не знаю с чем это связанно и как это можно исправить. Проверял с помощью логов, обновление в таблице происходит, но все равно из таблицы достается устаревшая информация.

Фрагмент с Recycler View

public class TodoFragment extends Fragment implements ToDoListAdapter.OnTodoClick {

private final String TAG = "TodoFragment";
private ImageButton addTodo;
private RecyclerView recyclerView;
private ArrayList<Todo> todoArrayList;
private Interactor interactor;
private ToDoListAdapter toDoListAdapter;
private TextView itIsTimeToAdd;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.todo_fragment, container, false);
    recyclerView = view.findViewById(R.id.todo_list);
    addTodo = view.findViewById(R.id.add_task);
    itIsTimeToAdd = view.findViewById(R.id.time_to_add_task);

    Log.d(TAG, "onCreateView");
    return view;
}

@Override
public void onResume() {
    super.onResume();
    interactor = new Interactor(getActivity());
    setOnClickListener();
    init();
}

private void init(){
    Log.d(TAG, "init: getting todoArrayList");
    todoArrayList = interactor.getTodoList();
    if(todoArrayList.size() == 0){
        Random random = new Random();
        int mRandomInt = random.nextInt(3);
        switch (mRandomInt){
            case 0:
                itIsTimeToAdd.setText(R.string.offer_1);
                break;
            case 1:
                itIsTimeToAdd.setText(R.string.offer_task);
                break;
            case 2:
                itIsTimeToAdd.setText(R.string.offer_2);
                break;
        }
    }
    Log.d(TAG, "init: todoArrayList successfully got");
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    toDoListAdapter = new ToDoListAdapter(getContext(), todoArrayList, (ToDoListAdapter.OnTodoClick) this);
    recyclerView.setAdapter(toDoListAdapter);
}

private void setOnClickListener(){
    addTodo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Navigation.findNavController(getView()).navigate(R.id.todoCreationFragment);
        }
    });
}

@Override
public void onClick(int position) {
    Todo todo = toDoListAdapter.getTodo(position);
    Bundle bundle = new Bundle();
    bundle.putString("TODO_ID", todo.getId());
    Navigation.findNavController(getView()).navigate(R.id.todoInfoFragment, bundle);
}

}

Фрагмент обновления данных

public class TodoInfoFragment extends Fragment implements TimePickerDialog.OnTimeSetListener {
     private Todo todo;
     private ImageButton cancel, deleteTask;
     private EditText todoEditText;
     private Interactor interactor;
     private ImageButton isComplete;
     private TextView pickedTime, timePicker;
     private Calendar calendar;
     private Button deleteAlarm;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view;
    view = inflater.inflate(R.layout.todo_edit_mode, container, false);
    cancel = view.findViewById(R.id.todo_edit_fragment_cancel_button);
    todoEditText = view.findViewById(R.id.todo_edit_fragment_edit_text_view);
    deleteTask = view.findViewById(R.id.todo_info_fragment_delete_button);
    isComplete = view.findViewById(R.id.todo_complete_button);
    pickedTime = view.findViewById(R.id.todo_info_picked_time);
    timePicker = view.findViewById(R.id.todo_info_time_picker);
    deleteAlarm = view.findViewById(R.id.todo_info_cancel_alarm);

    return view;
}

@Override
public void onStart() {
    super.onStart();
    String todoID = getArguments().getString("TODO_ID");
    interactor = new Interactor(getActivity());
    this.todo = interactor.getTodo(todoID);
    todoEditText.setText(todo.getText());
    if(todo.getIsComplete() == 1){
        isComplete.setImageResource(R.drawable.ic_check_box_ticked);
    }
    if(todo.getReminderTime() != null){
        pickedTime.setText(todo.getReminderTime());
    }
    setOnClickListeners();
}

private void setOnClickListeners() {
    cancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Navigation.findNavController(getView()).popBackStack();
        }
    });

    deleteTask.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new AlertDialog(todo, AlertDialog.TODO_FRAGMENT_ID, getView()).show(getActivity().getSupportFragmentManager(), "ALERT_DIALOG");
        }
    });

    isComplete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (todo.getIsComplete()){
                case 0:
                    todo.setIsComplete(1);
                    isComplete.setImageResource(R.drawable.ic_check_box_ticked);
                    break;
                case 1:
                    todo.setIsComplete(0);
                    isComplete.setImageResource(R.drawable.ic_check_box_outline);
            }
            interactor.updateTodoDb(todo);
        }
    });

    timePicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new TimePickerFragment((TimePickerDialog.OnTimeSetListener)TodoInfoFragment.this).show(getActivity().getSupportFragmentManager(), "TIME_PICKER_FRAGMENT");
        }
    });

    deleteAlarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            pickedTime.setText("");
            todo.setReminderTime("");
            interactor.updateTodoDb(todo);
            cancelAlarm();
        }
    });
}

@Override
public void onPause() {
    Log.d("TodoInfoFragment", "onPause");
    updateTodo();
    interactor.updateTodoDb(todo);
    super.onPause();
}

private void updateTodo() {
    todo.setText(todoEditText.getText().toString());
}

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    String mHour;
    String mMinute;
    calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, 0);

    if(hourOfDay > 9){
        mHour = hourOfDay + "";
    }else{
        mHour = "0" + hourOfDay;
    }
    if (minute > 9){
        mMinute = "" + minute;
    }else{
        mMinute = "0" + minute;
    }
    String time = mHour + ":" + mMinute;
    pickedTime.setText(time);
    todo.setReminderTime(pickedTime.getText().toString());
    interactor.updateTodoDb(todo);
    startAlarm(calendar, todo.getText());
}

private void startAlarm(Calendar c, String title) {
    if (calendar != null) {
        AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);
        Intent intent = new Intent(getActivity(), NotificationReceiver.class);
        intent.putExtra("title", title);
        intent.putExtra("id", todo.getRequestCode());
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), todo.getRequestCode(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
        if (alarmManager != null) {
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
        }
    }
}

private void cancelAlarm() {
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);
    Intent intent = new Intent(getActivity(), NotificationReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), todo.getRequestCode(), intent, 0);
    if (alarmManager != null) {
        alarmManager.cancel(pendingIntent);
    }
}

}

Скрипт получения списка из таблицы

public static String getTodoListScript() {
    return "select * from todoDatabase;";
}

Метод получения списка объектов из таблицы

public ArrayList<Todo> getTodoList() {
    SQLiteDatabase db = databaseHelper.getWritableDatabase();
    Cursor cursor = db.rawQuery(SQLScripts.getTodoListScript(), null);
    if (cursor.moveToFirst()) {
        int idColIndex = cursor.getColumnIndex("id");
        int textColIndex = cursor.getColumnIndex("todoText");
        int reminderTomeColIndex = cursor.getColumnIndex("reminderTime");
        int isDoneColIndex = cursor.getColumnIndex("isComplete");
        int requestCodeIndex = cursor.getColumnIndex("requestCode");
        ArrayList<Todo> todoArrayList = new ArrayList<>();
        do {
            Todo todo = new Todo(cursor.getString(idColIndex),
                    cursor.getString(textColIndex),
                    cursor.getInt(isDoneColIndex),
                    cursor.getString(reminderTomeColIndex),
                    cursor.getInt(requestCodeIndex));
            todoArrayList.add(todo);
        } while (cursor.moveToNext());
        cursor.close();
        db.close();
        return todoArrayList;
    } else {
        cursor.close();
        db.close();
        return new ArrayList<>();
    }
}

Метод обновления элемента таблицы

public void updateTodoDb(Todo todo) {
    SQLiteDatabase db = databaseHelper.getWritableDatabase();
    db.execSQL(SQLScripts.updateTodoListScript(todo));
    db.close();
}

Скрипт обновления элемента таблицы

public static String updateTodoListScript(Todo todo) {
    String id = "\"" + todo.getId() + "\"";
    String text = "\"" + todo.getText() + "\"";
    String reminderTime = "\"" + todo.getReminderTime() + "\"";
    int isComplete = todo.getIsComplete();
    return "UPDATE todoDatabase " +
            "SET todoText = " + text + ", " +
            "reminderTime = " + reminderTime + ", " +
            "isComplete = " + isComplete + ", " +
            "requestCode = " + todo.getRequestCode() + " " +
            "WHERE id = " + id + ";";

Код адаптера

public class ToDoListAdapter extends 
RecyclerView.Adapter<ToDoListAdapter.ToDoListViewHolder> {

String TAG = "ToDoListAdapter";
Context context;
ArrayList<Todo> todoArrayList;
OnTodoClick onTodoClick;

public ToDoListAdapter(Context context, ArrayList<Todo> 
todoArrayList, OnTodoClick onTodoClick) {
    this.context = context;
    this.todoArrayList = todoArrayList;
    this.onTodoClick = onTodoClick;
}

public void addObjToArray(Todo todo) {
    Log.d(TAG, "addObjToArray: object added");
    todoArrayList.add(todo);
    notifyDataSetChanged();
}

public Todo getTodo(int position){
    return todoArrayList.get(position);
}

@NonNull
@Override
public ToDoListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.todo_list_item, parent, false);
    return new ToDoListViewHolder(view, onTodoClick);
}

@Override
public void onBindViewHolder(@NonNull ToDoListViewHolder holder, int position) {
    final Todo todo = todoArrayList.get(position);
    holder.bind(todo);

}

@Override
public int getItemCount() {
    return todoArrayList.size();
}

class ToDoListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    private TextView todoText;
    private View color;
    private OnTodoClick onTodoClick;

    public ToDoListViewHolder(@NonNull View itemView, OnTodoClick onTodoClick) {
        super(itemView);
        todoText = itemView.findViewById(R.id.todo_text);
        color = itemView.findViewById(R.id.todo_color_flag);
        this.onTodoClick = onTodoClick;
        itemView.setOnClickListener(this);
        todoText.setOnClickListener(this);
    }

    void bind(final Todo todo) {
        todoText.setText(todo.getText());
            switch (todo.getIsComplete()){
            case 0:
                color.setBackgroundResource(R.color.colorMaterialRed);
                break;
            case 1:
                color.setBackgroundResource(R.color.colorMaterialGreen);
        }
    }

    @Override
    public void onClick(View v) {
            onTodoClick.onClick(getAdapterPosition());
    }
}

public interface OnTodoClick {
    void onClick(int position);
}

}

Ответы (0 шт):