dialog或者popWindows实现tab+viewpager联动

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


如果有自定义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+viewpager联动)