屏幕方向更改后片段重置

And*_*por 5 android android-fragments

我有一个在 onCreate 中加载片段的 MainActivity。我有另一个从操作栏加载的片段。如果我更改第一个片段的屏幕方向,它会按预期工作。如果我更改第二个片段,它将重置为第一个片段。这似乎是因为它重建了所有内容并将原始片段放回到片段管理器中。我确信有一种方法可以跟踪当前显示的片段,但我不确定如何进行。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Database entries
    myDataSource = new FillupDataSource(this);
    myDataSource.open();

    // Create an instance of the MyListFragment 
    MyListFragment firstFragment = new MyListFragment();
    Bundle bundle = new Bundle();
    bundle.putSerializable("dataSource", (Serializable) myDataSource);
    firstFragment.setArguments(bundle);

    // Add the fragment to the 'fragment_container' FrameLayout
    getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit();

    getActionBar().setDisplayHomeAsUpEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)

我确信这一定是已经做过很多次的事情,但我很难知道如何搜索它。

Sha*_*ane 2

一个可能的解决方案是保存当前片段索引和实例状态:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   //save current fragment index
}
Run Code Online (Sandbox Code Playgroud)

然后恢复状态

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    //have the activity switch the fragment via the saved fragment index
}
Run Code Online (Sandbox Code Playgroud)

您可以在这篇 SO 帖子中阅读有关实例状态的更多信息。