即使父片段未处于活动状态,也会加载ViewPager片段 [英] ViewPager fragment loads even if the parent Fragment is not active

查看:69
本文介绍了即使父片段未处于活动状态,也会加载ViewPager片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

背景

我的应用程序中只有一个活动,该活动根据某些菜单项的选择加载2个片段

public class ActivityMain extends AppCompatActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(savedInstanceState == null) {
            loadFragment(1); // DEFAULT FRAGMENT, AT THE BEGINNING
        }
    }
    ..........................
    ..........................
    // This method is called above, ALSO onItemClick in the Navigation Drawer (code not included for brevity)
    public void loadFragment(int position) {
        Fragment fragment = null;
        switch (position) {
            case 1:
                fragment = new Fragment1();
                break;
            case 2:
                fragment = new Fragment2();
                break;
            default:
                break;
        }
        if (fragment != null) {
            getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, "frag_" + position).addToBackStack(null).commit();
        }
    }
}

"Fragment1"是一个简单的片段,在TextView中具有固定的文本. "Fragment2"使用 我面临的问题:

即使我从Activity的框架布局中删除"Fragment2"(使用getFragmentManager().beginTransaction().remove),Fragment"FragmentViewPager"也不会被销毁,而是每次Activity恢复时都会恢复.

问题

为什么FragmentViewPager不会被"Fragment2"破坏?

解决方案

如果您使用的是FragmentStatePagerAdapter,则这不会破坏片段,并且当您滑动并返回该片段时,它将显示旧数据而不会刷新.因为没有被viewpager破坏.

The background

I have single activity in my App which loads 2 fragments based on some menu item selection

public class ActivityMain extends AppCompatActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(savedInstanceState == null) {
            loadFragment(1); // DEFAULT FRAGMENT, AT THE BEGINNING
        }
    }
    ..........................
    ..........................
    // This method is called above, ALSO onItemClick in the Navigation Drawer (code not included for brevity)
    public void loadFragment(int position) {
        Fragment fragment = null;
        switch (position) {
            case 1:
                fragment = new Fragment1();
                break;
            case 2:
                fragment = new Fragment2();
                break;
            default:
                break;
        }
        if (fragment != null) {
            getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, "frag_" + position).addToBackStack(null).commit();
        }
    }
}

"Fragment1" is a simple fragment with a fixed text in a TextView. "Fragment2" uses SlidingTabLayout to load a Fragment "FragmentViewPager" in a viewpager using FragmentStatePagerAdapter.

The issue I am facing:

Even if I remove "Fragment2" from the Activity's Frame Layout (using getFragmentManager().beginTransaction().remove), Fragment "FragmentViewPager" does not get destroyed, rather it resumes every time Activity resumes.

Question

Why FragmentViewPager is not destroyed with "Fragment2"?

解决方案

If you are using FragmentStatePagerAdapter then this will not destroy fragment and when you swipe and come back to that fragment it will show old data without refresh. Because of not destroyed by viewpager.

这篇关于即使父片段未处于活动状态,也会加载ViewPager片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆