当我从TabFrag1上的TabFrag3开始时,TabFrag1会自动重新加载所有片段。 当我从TabFrag1上的Tabfrag3切换时,我需要停止" onCreateView" 如果已经加载了该功能,我怎么能停止它? 我希望它刚刚起步。
编辑:
MainActivity:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
TabFragment1 tab1 = new TabFragment1();
return tab1;
case 1:
TabFragment2 tab2 = new TabFragment2();
return tab2;
case 2:
TabFragment3 tab3 = new TabFragment3();
return tab3;
default:
return null;
}
}
}
TabFragment1
public class TabFragment1 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View inflatedView = inflater.inflate(R.layout.tab_fragment_1, container, false);
final ListView list= (ListView) inflatedView.findViewById(R.id.list);
new function();//this function load json data
return inflatedView;
}
这个onCreateView反复收费数据......
编辑2: 我在这里找到了解决方案:https://stackoverflow.com/a/36518677/6910082
答案 0 :(得分:0)
您应该使用instead
添加replace
。在添加新的Fragment
之前,您应该检查它是否已经在FragmentManager
中退出,如果有,则隐藏当前可见的Fragment
&显示另一个,如果它不存在,那么add
它并隐藏当前可见的Fragment
。
例如:
@Nullable @Override public Fragment getFragmentByTag(@NonNull FragmentManager fragmentManager, @NonNull String tag) {
return fragmentManager.findFragmentByTag(tag);//returns fragment by its TAG.
}
@Nullable @Override public Fragment getVisibleFragment(@NonNull FragmentManager manager) {
List<Fragment> fragments = manager.getFragments();
if (fragments != null && !fragments.isEmpty()) {
for (Fragment fragment : fragments) {
if (fragment != null && fragment.isVisible()) {
Logger.e(fragment.getClass().getSimpleName(), fragment.isVisible());
return fragment;//return current visible fragment to hide
}
}
}
return null;
}
那么你应该做点什么:
Fragment currentVisibleFragment = getVisibleFragment(fragmentManager);
Fragment fragmentToAddOrShow = getFragmentByTag(fragmentManager, FormsListView.TAG);
然后你应该检查fragmentToAddOrShow
是not null
是否隐藏currentVisibleFragment
并显示fragmentToAddOrShow
其他隐藏currentVisibleFragment
并添加fragmentToAddOrShow
答案 1 :(得分:0)
使用hide()而不是每次都去add(),只在第一次添加()