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