gpt4 book ai didi

android - 屏幕旋转时的 fragment View 状态

转载 作者:行者123 更新时间:2023-11-29 15:14:49 28 4
gpt4 key购买 nike

当用户单击列表中的项目时,我会加载一些 fragment 。假设用户单击了列表中的第二个项目,加载了第二个 fragment 。但是,在旋转屏幕时,列表中的第一个 fragment 被加载。我怎样才能确保在用户旋转屏幕时加载相同的 fragment 。这就是我加载 fragment 的方式

private void selectItem(position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new FirstFragment();
break;
case 1:
fragment = new SecondFragment();
break;
case 2:
fragment = new ThirdFragment();
break;
default:
break;
}
if (fragment != null) {
android.app.FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
}
else {
Log.e("NavigationActivity", "Error in creating fragment");
}
}

我在 Activity 的 onCreate 中调用 selectItem(0)

最佳答案

整个 Activity 在轮换期间被销毁并重新创建。因此,如果您在 Activity.onCreate 中调用 setItem(0),那么您将始终在内容框架中获得 FirstFragment。

似乎简单的事情可能只是检测您是否已经在 onCreate 中设置了一个 fragment 而不是加载默认 fragment 。使用 onSaveInstanceState 和/或将 fragment 标记为保留。

我在保留 fragment 或初始加载后的 fragment 管理方面没有太多经验,因此仅使用 onSaveInstanceState 来跟踪加载了哪个似乎是合适的。

在您的 Activity 中,覆盖 onSaveInstanceState:

@Override
public void onSaveInstanceState(Bundle bundle)
{
bundle.putInt("which_fragment", _fragmentId);
super.onSaveInstanceState(bundle);
}

其中 _fragmentId 只是您正在加载的特定 fragment 的一些数字标识符。它甚至可能是它的布局 ID。在您的 selectItem 方法中设置此值。

然后在onCreate中:

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

_fragmentId = 0;
if (savedInstanceState != null)
{
_fragmentId = savedInstanceState.getInt("which_fragment", 0);
}

...

selectItem(_fragmentId);
}

关于android - 屏幕旋转时的 fragment View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25520638/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com