方向更改后的片段 TextView 状态(具有不同的布局)
Fragment TextView state after orientation change (with different layouts)
我正在尝试创建一个计算器,其中包含纵向模式的简单版本和横向模式的科学版本以及过去计算的列表。我正在 运行 解决将我的纵向模式文本视图中的当前值传递给横向模式的问题。
我的主要activity:
private FragmentManager fm;
Fragment fragmentScientific, fragmentList
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm = getSupportFragmentManager();
setUpFragments();
}
private void setUpFragments() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
fragmentScientific= fm.findFragmentById(R.id.container_ui_landscape);
fragmentList= fm.findFragmentById(R.id.container_list);
if ((fragmentScientific == null) && (fragmentList == null)) {
fragmentScientific= new ScientificFragment();
fragmentList= new RecordListFragment();
fm.beginTransaction()
.add(R.id.container_ui_landscape, fragmentScientific)
.add(R.id.container_list, fragmentList)
.commit();
}
} else {
fragmentScientific= fm.findFragmentById(R.id.container_ui_portrait);
if (fragmentScientific== null) {
fragmentScientific = new ScientificFragment();
fm.beginTransaction()
.add(R.id.container_ui_portrait, fragmentScientific)
.commit();
}
}
}
我试图在我的 ScientificFragment class 中使用 onSaveInstanceState 包来携带它
private TextView newRes;
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("currentCal", newRes.getText().toString());
}
但我最终得到了两个单独的保存包,一个用于纵向,一个用于横向。
Android 系统实际上会在方向更改时为您处理视图恢复,无论您是否有不同的布局。关键是在两个布局中具有相同的 ID。使用不同的或根本不指定任何内容将阻止它们的状态被恢复。
我正在尝试创建一个计算器,其中包含纵向模式的简单版本和横向模式的科学版本以及过去计算的列表。我正在 运行 解决将我的纵向模式文本视图中的当前值传递给横向模式的问题。
我的主要activity:
private FragmentManager fm;
Fragment fragmentScientific, fragmentList
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm = getSupportFragmentManager();
setUpFragments();
}
private void setUpFragments() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
fragmentScientific= fm.findFragmentById(R.id.container_ui_landscape);
fragmentList= fm.findFragmentById(R.id.container_list);
if ((fragmentScientific == null) && (fragmentList == null)) {
fragmentScientific= new ScientificFragment();
fragmentList= new RecordListFragment();
fm.beginTransaction()
.add(R.id.container_ui_landscape, fragmentScientific)
.add(R.id.container_list, fragmentList)
.commit();
}
} else {
fragmentScientific= fm.findFragmentById(R.id.container_ui_portrait);
if (fragmentScientific== null) {
fragmentScientific = new ScientificFragment();
fm.beginTransaction()
.add(R.id.container_ui_portrait, fragmentScientific)
.commit();
}
}
}
我试图在我的 ScientificFragment class 中使用 onSaveInstanceState 包来携带它
private TextView newRes;
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("currentCal", newRes.getText().toString());
}
但我最终得到了两个单独的保存包,一个用于纵向,一个用于横向。
Android 系统实际上会在方向更改时为您处理视图恢复,无论您是否有不同的布局。关键是在两个布局中具有相同的 ID。使用不同的或根本不指定任何内容将阻止它们的状态被恢复。