Передача объекта из одного фрагмента в другой при изменении ориентации - PullRequest
0 голосов
/ 07 июня 2019

Это похоже на дублирующий вопрос, но на самом деле ответы на аналогичный вопрос не решают мою проблему: я делаю игру (слайд-головоломка), в которой важно состояние (массив чисел) доски. Поэтому, когда ориентация меняется, я хочу сохранить этот массив из фрагмента 1 (который будет на экране только в портретном режиме) и передать его во фрагмент 2 (который будет на экране только в ландшафтном режиме). До сих пор мне удалось получить это (в onCreate деятельности, которая содержит фрагменты):

GameFragment gameFragment = new GameFragment();
gameFragment.setArguments(getIntent().getExtras());

GameFragment9 gameFragment9 = new GameFragment9();
gameFragment9.setArguments(getIntent().getExtras());

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.container, gameFragment, "fragmentGame")
                            .commit();
}
else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.container, gameFragment9, "fragmentGame9")
                            .commit();
}

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

1 Ответ

0 голосов
/ 07 июня 2019

ViewModel может быть ответом на ваш вопрос.Создайте список чисел и оберните его LiveData (необязательно).Получить номера через ViewModel и сохранить их через ViewModel.Внутри onViewCreated установить текст из ViewModel.Как и

textView.text = viewModel.numbers

Единственная важная вещь - это то же самое, что ViewModel следует использовать внутри действия и его дочерних фрагментов

, этого можно достичь, предоставив одного и того же владельца ViewModel во время инициализации.время ViewModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...