onCreateView
是 Android 中 Fragment 生命周期的一个方法,用于创建和返回该 Fragment 的视图层次结构。通常在这个方法中进行布局的初始化和视图的绑定。
onCreateView
?onCreateView
。setRetainInstance(true)
这个方法可以让 Fragment 在配置更改时保持不变,但需要注意它不适用于进程被杀死的情况。
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 初始化视图
return inflater.inflate(R.layout.fragment_my, container, false);
}
}
ViewModel 可以在配置更改时保持数据,避免重复创建视图。
public class MyViewModel extends ViewModel {
// 这里可以保存与UI相关的数据
}
public class MyFragment extends Fragment {
private MyViewModel viewModel;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = new ViewModelProvider(this).get(MyViewModel.class);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 使用viewModel中的数据初始化视图
return inflater.inflate(R.layout.fragment_my, container, false);
}
}
确保在执行 Fragment 事务时,不会不必要地重新创建 Fragment。
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
// 检查是否已经存在该Fragment实例
MyFragment myFragment = (MyFragment) fragmentManager.findFragmentByTag("MyFragmentTag");
if (myFragment == null) {
myFragment = new MyFragment();
transaction.add(R.id.fragment_container, myFragment, "MyFragmentTag");
} else {
// 如果已经存在,则将其显示出来
transaction.show(myFragment);
}
transaction.commit();
通过上述方法可以有效减少 onCreateView
被多次调用的情况,提升应用的性能和用户体验。
领取专属 10元无门槛券
手把手带您无忧上云