Java 碎片';多次调用了onCreateView

Java 碎片';多次调用了onCreateView,java,android,android-fragments,android-viewpager,Java,Android,Android Fragments,Android Viewpager,因此,我有一个设置片段,它的onCreateView被多次调用。我有一个ViewPager,它位于片段的布局中,通过单击工具栏中“选项”菜单中的“设置”图标来启动片段 我不能仅仅将ViewPager移动到活动中,因为我希望能够滑动回上一个片段 此外,我还尝试使用 for(int i=0;i

因此,我有一个设置片段,它的
onCreateView
被多次调用。我有一个ViewPager,它位于片段的布局中,通过单击工具栏中“选项”菜单中的“设置”图标来启动片段

我不能仅仅将ViewPager移动到活动中,因为我希望能够滑动回上一个片段

此外,我还尝试使用

for(int i=0;i
但这毫无帮助

片段代码:

公共类设置片段扩展片段{
公共设置片段(){
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@不赞成
@凌驾
创建视图上的公共视图(布局、充气机、最终视图组容器、,
Bundle savedInstanceState){
最终视图根视图=充气机。充气(R.layout.fragment\u设置,容器,false);
最终CustomViewPager viewPager=rootview.findViewById(R.id.SettingsFragmentViewPager);
setAdapter(新适配器(getFragmentManager());
viewPager.setOffscreenPageLimit(2);
viewPager.setCurrentItem(1);
viewPager.addOnPageChangeListener(新的viewPager.SimpleOnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
如果(位置==0){
viewPager.SetPaginEnabled(假);
FragmentManager fm=getFragmentManager();
对于(int i=0;i
片段的xml:


我用于ViewPager的适配器:

公共类适配器扩展FragmentStatePagerAdapter{
公共适配器(碎片管理器碎片管理器){
超级(碎片管理器、行为\仅恢复\当前\碎片);
}
@NotNull
@凌驾
公共片段getItem(int位置){
如果(位置==0){
返回新的BlankFragment();
}
如果(位置==1){
返回新设置片段();
}
返回null;
}
@凌驾
public int getCount(){
返回2;
}
}
我看到,在我的适配器中,我也返回了
SettingsFragment
。是否有方法返回单击工具栏中的设置按钮时创建的片段

顺便说一句,我使用以下方法添加片段:

@覆盖
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.updateId:
Log.d(“主要活动----”,“添加片段…”);
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.push_right_in,0);
ft.add(R.id.MainActivityConstraint,新设置片段());
ft.commit();
Log.d(“活动----”,“添加片段…”);
打破
}
}

我决定使用名为swipebacklayout的外部库,而不是ViewPager。
您可以在这里查看。

我决定使用名为swipebacklayout的外部库,而不是ViewPager。
您可以在这里查看。

我相信这是因为您正在添加一个新的设置片段。在第一次启动活动时,请使用ft.add,而不是ft.replace并初始化一个设置片段,这样您就不会实例化新的设置片段。感谢您的快速回复,在启动活动时如何添加并初始化设置片段?@GarrenFitzenreiterFragment mySettingsFragment=新设置片段();我尝试了用
ft.replace
替换
ft.add
的解决方案,但是
onCreateView
仍然会执行3次。此外,我在我的活动的
onCreate
中添加了
片段设置片段=新设置片段
。我是否也需要更改适配器中的某些内容我注意到您正在尝试在空白片段和设置片段之间切换。您需要一个主活动来保存保存这两个片段(空白和设置)的viewpager组件基本上,您将停留在主活动上,但将在VIEWPER组件内部的空白和设置片段之间进行擦除。我相信这是因为您正在添加一个新的设置片段。而不是使用F.Adt,而是使用FTT替换,并在启动第一个活动时初始化一个设置片段,这样您就不会实例化新的ON。es.感谢您的快速回复,我如何在启动活动时添加并初始化SettingsFragment?@GarrenFitzenreiterFragment mySettingsFragment=new SettingsFragment();我尝试了用
ft.replace
替换
ft.add
的解决方案,但是
onCreateView
仍然会执行3次。此外,我在我的活动的
onCreate
中添加了
片段设置片段=新设置片段
。我是否也需要更改适配器中的某些内容我注意到您正在尝试在空白片段和设置片段之间切换。您需要一个主活动来保存保存这两个片段(空白和设置)的viewpager组件基本上,您将停留在主活动上,但将在视窗组件内部的空白和设置片段之间进行擦除。