提问者:小点点

方向更改后的片段文本视图状态(具有不同的布局)


我正在尝试创建一个计算器,在肖像模式下有一个简单的版本,在景观中有一个科学版本旁边有一个过去计算的列表。我遇到了将肖像模式的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());
    }

但我最后有两个单独的保存包,一个用于肖像,一个用于风景。


共1个答案

匿名用户

Android系统实际上会在方向更改时为您处理视图恢复,而不管您是否有不同的布局。关键是在两种布局中都要有相同的ID。使用不同的或根本不指定任何内容都将阻止它们的状态恢复。