gpt4 book ai didi

android - 为什么在将 fragment 事务与 FrameLayout 一起使用时 fragment 会调用 OnCreate/OnCreateView?

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:11 26 4
gpt4 key购买 nike

我的应用程序的主页有一个 FrameLayout。

我在 Activity 开始时实例化两个 fragment ,并尝试使用菜单按钮在 fragment 之间切换。

scanHistoryFrag = new HistoryFragment();
scanFrag = new ScanFragment();

我从不替换这些对象 - 我在应用程序的整个生命周期中都使用相同的对象。但是,当我在 FrameLayout 中交换它们时...

private void ChangeFragment(Android.Support.V4.App.Fragment fragment)
{
Android.Support.V4.App.FragmentTransaction ft = SupportFragmentManager.BeginTransaction();
ft.Replace(Resource.Id.fragmentContainer, fragment);
ft.Commit();
}

OnCreate 和 OnCreateView 再次在 Fragment 上调用...这意味着我在该 fragment 上创建后所做的任何调整都将再次被初始值覆盖。我似乎找不到任何解释为什么会发生这种情况或如何避免这种情况。

ChangeFragment 方法由 OnOptionsItemSelected 调用,因为我正在使用菜单按钮来切换它们。

最佳答案

I never replace these objects - I use the same ones throughout the lifecycle of the application.

Fragment子类的初始化只是创建该类对象的一个​​实例,会调用该类的构造函数,但不会走完Fragment的生​​命周期> 除非添加了这个Fragment,更多信息可以引用Fragments .为了更容易理解,我个人认为实例保存的是这个Fragment类的数据状态,而lifecycle事件处理的是这个Fragment的 View 状态。

which means any adjustments I made post creation on that fragment are overwritten with initial values again.

是的,你是对的。为了避免再次用初始值覆盖,我们可以在 OnCreateView 中缓存 fragment 的 View ,例如:

private View rootView;

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
// return inflater.Inflate(Resource.Layout.YourFragment, container, false);

if (rootView == null)
{
//first time creating this fragment view
rootView = inflater.Inflate(Resource.Layout.fragmentlayout1, container, false);

//Initialization
//TODO:
}
else
{
//not first time creating this fragment view
ViewGroup parent = (ViewGroup)rootView.Parent;
if (parent != null)
{
parent.RemoveView(rootView);
}
}
return rootView;
}

关于android - 为什么在将 fragment 事务与 FrameLayout 一起使用时 fragment 会调用 OnCreate/OnCreateView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745733/

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