ViewPager 问题中的片段

Posted

技术标签:

【中文标题】ViewPager 问题中的片段【英文标题】:Fragments inside ViewPager issue 【发布时间】:2015-10-04 02:10:20 【问题描述】:

ViewPager 中有 3 个片段。对于每个Fragment,我设置了不同的NavigationBar 颜色(以编程方式)。这是代码。

@Override
    public void init(Bundle arg0) 
        // TODO Auto-generated method stub
        addSlide(new Fragment1());
        addSlide(new Fragment2());
        addSlide(new Fragment3());

    


    private class Fragment1 extends Fragment 

        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
             if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)                 
                    getWindow().setNavigationBarColor(Color.parseColor(BLUE));
            
            Log.e("test", "1");
            return inflater.inflate(R.layout.layout_intro, container, false);
        

    

    private class Fragment2 extends Fragment 

        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
             if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)                 
                    getWindow().setNavigationBarColor(Color.parseColor(RED));
            
                Log.e("test", "2");

            return inflater.inflate(R.layout.layout_intro_2, container, false);
        

    

    private class Fragment3 extends Fragment 

        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
             if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)                 
                    getWindow().setNavigationBarColor(Color.parseColor(GREEN));
            
                Log.e("test", "3");

            return inflater.inflate(R.layout.layout_intro_3, container, false);
        

    

 

Logcat 中,我看到了错误的数字。例如,我在第一个 Fragment 中,我看到绿色 NavigationBar 和“2”。为什么?我该如何解决?

【问题讨论】:

【参考方案1】:

发生这种情况是因为ViewPager 已经加载了下一个片段,因此如果您在片段一上,则片段 2 已经创建,如果您滑动到片段 2,将创建片段 3。这就是滑动流畅的原因。

您需要将 onPageChangeListener 添加到您的ViewPager 中,如下所示:

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() 

            @Override

        public void onPageSelected(int position) 
            switch(position) 
                case 1: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)                 
                      getWindow().setNavigationBarColor(Color.parseColor(BLUE));
                    
                    break;    
                case 2: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)                 
                      getWindow().setNavigationBarColor(Color.parseColor(RED));
                    
                    break;    
                case 3: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)                 
                      getWindow().setNavigationBarColor(Color.parseColor(GREEN));
                    
                    break;    
            
        

        @Override
        public void onPageScrolled(int position, float offset, int offsetPixel) 
        

        @Override
        public void onPageScrollStateChanged(int state) 

        
    );

等等。

【讨论】:

以上是关于ViewPager 问题中的片段的主要内容,如果未能解决你的问题,请参考以下文章

ViewPager 中的片段被重新创建

替换 Viewpager 中的片段 [重复]

ViewPager2 中的片段在返回父片段时被重新创建

片段中的Tablayout + viewpager,需要清除viewpager中的edittext数据

底部导航片段中的 Viewpager2

从 ViewPager 中检索片段