当方向改变时,将对象从一个片段传递到另一个片段

时间:2019-06-07 02:35:50

标签: java android android-fragments

这似乎是一个重复的问题,但实际上类似问题的答案并不能解决我的问题:我正在做一个游戏(幻灯片),其中棋盘的状态(数字数组)很重要。因此,当方向改变时,我想从片段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 :(得分:0)

ViewModel可以回答您的问题。创建数字列表,并用LiveData包装(可选)。通过ViewModel获取编号并通过ViewModel保存它们。在onViewCreated内设置ViewModel中的文本。喜欢

textView.text = viewModel.numbers
  

唯一重要的是,应在内部使用完全相同的ViewModel   活动及其子片段

您可以通过在ViewModel初始化期间向ViewModel提供相同的所有者来实现这一目标