簡體   English   中英

方向改變后的片段TextView state(布局不同)

[英]Fragment TextView state after orientation change (with different layouts)

我正在嘗試創建一個具有縱向模式的簡單版本和一個科學版本的計算器,以及橫向模式的過去計算列表。 我遇到了將縱向模式的 textview 中的當前值傳遞給橫向模式的問題。

我的主要活動:

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。 使用不同的或根本不指定任何內容將阻止他們的 state 被恢復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM