dialog或者popWindows实现tab+viewpage

作者: sakura_L | 来源:发表于2016-12-23 16:49 被阅读670次

    1、需求点击某个按钮,弹出一个页面显示数据,
    对数据分析用以下方法实现:
    方案一popWindows+tablayout+Viewpager+fragment
    为什么要使用这些控件?
    popWindows:点击弹出 点击空白处消失,可以自定义显示布局大小;
    tablayout+viewPager+fragment可以滑动tab选项卡,跟viewpager联动。
    结果:失败
    失败原因:
    popWindows里面的布局里面有viewPager,通过
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    viewRankPopupView = (ViewGroup)inflater.inflate(R.layout.pop_rank_lxm,null);
    mViewPager= (ViewPager) viewRankPopupView.findViewById(R.id.iv_viewPager);

                viewRankPopupView = (ViewGroup)inflater.inflate(R.layout.pop_***,null);
           
        /**
         * 通过viewRankPopupView 查找布局viewPager会报找不到ID 异常;
         *原以为是上面这句的问题去检查布局代码 没有错误。
         *分析:
         *既然ViewPager在布局里面他却找不到ID,得不到他的实例,那我就通过其他方法找出来
         *如下:
         */
          int size = viewRankPopupView.getChildCount();
            for (int i = 0; i < size; i++) {
                View view = viewRankPopupView.getChildAt(i);
                if (view instanceof ViewPagerIndicator){
                    indicator = (ViewPagerIndicator)view;
                }else if (view instanceof ViewPager){
                    mViewPager=(ViewPager)view;
                }else if (view instanceof SimpleDraweeView)
                {
                    idPalyHeadSdv= (SimpleDraweeView) view;
                }
                L.i(String.format(Locale.CHINA,"%d,%s",i,view.getClass().getSimpleName()));
            }
             //  遍历所有子控件 分别判断获取到实例这样就可以不用findViewByID
            // 但是还是报了同样的错误no view for id***  debug 问题出现在这行,而且在activity上运行没有问题 mViewPager.setAdapter(adapter);
            // 既然这样我去控件里面把Viewpager的ID 删除试试?   异常0xFFFFFFFF 这个是因为viewpager在没有指定ID 的情况下父布局随机分配的一个。
            // 反正就是必须有ID,所以此方案失败。
                    
               mViewPager.setAdapter(adapter);
                tabLayout.setupWithViewPager(mViewPager);
    

    方案二:
    dialogActivity+tabLayout+viewPager+fragment;
    dialog主题的activity可以实现 点击弹出 点击空白处消失,可以自定义显示布局大小;
    坑1:
    主题Theme.Dialog 这个会抛异常 design包应该用Theme.AppCompat.DayNight.Dialog(这个是后来发现的)
    ,当时选择用自定义控件 来实现;
    坑2:
    将主题改成Theme.AppCompat.DayNight.Dialog,可以实现需求的功能,但是这个时候会有一个滑动不顺畅的问题
    需要将viewpager的外部滑动设置为flase
    mViewPager.setScrollContainer(false);
    还有一个小问题:
    既然是activity 如果不设置就会出现Title ,这里如果你用的是android:windowNoTitle 部分机型无效;所以改成下面这样就OK
    <style name="Transparent" parent="Theme.AppCompat.DayNight.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
    </style>

    如果有自定义tablayout宽度的可以 看我另外一篇http://www.jianshu.com/p/7f7579c8704c
    对tablayout属性不了解的可以看http://www.jianshu.com/p/2b2bb6be83a8/comments/6607376#comment-6607376.
    这个属性介绍的很全适合新手,但是里面的对设置当前选中项如果跟Viewpager联动 只需要对viewpager设置即可;
    githus demo https://github.com/SakuraLxm/popWindows_activityDialog

    相关文章

      网友评论

        本文标题:dialog或者popWindows实现tab+viewpage

        本文链接:https://www.haomeiwen.com/subject/zpocvttx.html