这似乎是一个重复的问题,但实际上类似问题的答案并不能解决我的问题:我正在做一个游戏(幻灯片),其中棋盘的状态(数字数组)很重要。因此,当方向改变时,我想从片段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来检测屏幕何时发生变化以及是否有措施,但不知道该怎么做。
答案 0 :(得分:0)
ViewModel可以回答您的问题。创建数字列表,并用LiveData包装(可选)。通过ViewModel获取编号并通过ViewModel保存它们。在onViewCreated
内设置ViewModel中的文本。喜欢
textView.text = viewModel.numbers
唯一重要的是,应在内部使用完全相同的ViewModel 活动及其子片段
您可以通过在ViewModel初始化期间向ViewModel提供相同的所有者来实现这一目标