我正在尝试创建一个计算器,在肖像模式下有一个简单的版本,在景观中有一个科学版本旁边有一个过去计算的列表。我遇到了将肖像模式的textview中的当前值传递给横向模式的问题。
我的主要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类中使用onSaveInstanceState包来承载它
private TextView newRes;
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("currentCal", newRes.getText().toString());
}
但我最后有两个单独的保存包,一个用于肖像,一个用于风景。
Android系统实际上会在方向更改时为您处理视图恢复,而不管您是否有不同的布局。关键是在两种布局中都要有相同的ID。使用不同的或根本不指定任何内容都将阻止它们的状态恢复。