VictorPower
@VictorPower

Почему после завершения приложения восстанавливается другое активити?

Итак, имеются: главное активити с фрагментом внутри, второе активити для доп.действий. После необходимых операций нажимаю кнопку назад в экшн-баре, происходит возврат в главное активити, окей, еще раз нажимаю кнопку назад, происходит выход из приложения, окей, снова запускаю приложение, запускается второе активити. Вопрос: почему так происходит?
Код

Код MainActivity - стандарт.
Код MainFragment(находится в MainActivity)
public class MainFragment extends Fragment implements View.OnClickListener{

    FloatingActionButton add_note;
    Button clear_notes;
    long id;
    String text;

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

        View rootView = inflater.inflate(R.layout.main_fragment, container, false);
        RecyclerView recyclerView = rootView.findViewById(R.id.list);
        DataAdapter mAdapter = new DataAdapter();
        recyclerView.setAdapter(mAdapter);
        recyclerView.setItemAnimator(new DefaultItemAnimator());

        return rootView;
    }

    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        add_note = requireView().findViewById(R.id.add_note);
        clear_notes = requireView().findViewById(R.id.clear_notes);
        add_note.setOnClickListener(this);
        clear_notes.setOnClickListener(this);

        LiveData<Integer> idLD = DataAdapter.getIdLD();
        LiveData<Boolean> runEditor = DataAdapter.getRunEditor();

        idLD.observe(getViewLifecycleOwner(), new Observer<Integer>() {
            @Override
            public void onChanged(@Nullable Integer value) {
                id = DbAccess.noteReturn(value).id;
                text = DbAccess.noteReturn(value).text;
            }
        });

        runEditor.observe(getViewLifecycleOwner(), new Observer<Boolean>() {
            @Override
            public void onChanged(@Nullable Boolean value) {
                if (value = true) {
                    runEditor();
                }
            }
        });

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.add_note:
                runCreator();
                break;
            case R.id.clear_notes:
                DbAccess.clearNotes();
                break;
        }
    }

    public void runCreator() {
        Intent intent = new Intent(getActivity(), EditorActivity.class);
        startActivity(intent);
    }

    public void runEditor() {
        Intent intent = new Intent(getActivity(), EditorActivity.class);
        intent.putExtra("id", id);
        intent.putExtra("text", text);
        startActivity(intent);
    }
}

Код второго активити(EditorActivity), которое любят запускаться, когда не следует
public class EditorActivity extends AppCompatActivity implements View.OnClickListener{

    EditText noteEditText;
    Button saveNoteButton;
    long id;
    String noteText;
    Boolean isEditor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_editor);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        noteEditText = findViewById(R.id.noteEditText);
        saveNoteButton = findViewById(R.id.saveNoteButton);

        saveNoteButton.setOnClickListener(this);

        if(getIntent().getExtras()!=null) {
            isEditor = true;
            noteEditText.setText(getIntent().getStringExtra("text"));
            id = getIntent().getLongExtra("id", 0);
        }
        else {
            isEditor = false;
        }


    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.saveNoteButton) {
            if (isEditor) {
                noteText = noteEditText.getText().toString();
                DbAccess.updateNote(id, noteText);
            }
            else {
                noteText = noteEditText.getText().toString();
                DbAccess.addNote(noteText);
            }
            finish();
        }
    }
    }
}

  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Видимо, срабатывает лайвдата и вызывается метод runCreator().
Чтобы это доказать или опровергнуть, нужно поставить брейкпоинт на эту строку:

5f2abcc2ea317435287054.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы