Aandroid在ViewPager中添加ListView
![此博文包含图片](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
最近的项目中碰到一个需要横竖都能滑动的页面效果,如同手机qq的好友菜单界面(如下图),可以通过选项卡来选择需要的界面,也可以通过屏幕手指的滑动来实现,而每一个分页面的内容对应的是一个可以上下滑动的ListView,所以最后结合起来的效果是,在页面中可以上下滑动,在各个分页之间可以左右滑动。
对于这个效果有两种方案,一种是通过TabActivitiy来实现,将选项卡设置为TabActibitiy的标志,通过将需要的分页加载到Tab的各个标志中去,但是这种方法,由于每一次切换选项卡的时候都会重新去创建一个新Activity的实例,所以当界面很多时切换会很迟钝,同时这种方法不能实现屏幕手指滑动来切换界面。
另外一种就是今天要讲的,在ViewPager中添加ListView。
先说ViewPager,ViewPager是google官方提供的一个兼容低版本android设备的软件包,
ViewPager的主要功能是使视图左右滑动,单纯ViewPaager添加静态页面的教程可以在网上搜到,这里只是简单介绍:(看不太懂的请参考其他ViewPager教程)
1.在布局文件中加入组件
<android.support.v4.view.ViewPager
和android的其他组件一样,这里只需要声明一个组件,并指定它的基本属性。
2.加载要显示的选项卡
这里的R.layout.hero_list是每个分页中要显示的内容的xml布局。
****************************************************************************
LayoutInflater
获取viewPager组件:
viewPager
创建一个list对象:
viewList
到这里,就和以上的不一样了!!
LayoutInflater对象的inflater方法只能实例化一个view对象,由于android中不能通过直接将一个xml布局声明为一个Listview,所以就不能直接通过inflater方法来实例listview对象。
这里,我曾经试过如下方法,都是错误的,希望大家引起注意:
直接通过强制类型转换,将View对象转换为ListView对象:
ListView
这个方法编译可以通过,但是在运行时系统会报出一个类型转换的错误!
直接通过findViewbyId方法通过listview的组件ID来获取listview对象:
ListView
这个方法也是编译时可以通过,运行时在这一步不会出现问题,但是当下面为listview添加SimpleAdpater适配器的时候,会抛出一个空指针异常,调试模式到这一步时,会观察到通过findViewbyId方法得到的listview是一个空对象。
原来findviewById是View这个类中的方法,默认调用时其实应该是:
this.findviewById();
由于上图代码中的R.id.herolist这个listview的声明并不在当前的viewPager所在的xml布局中,所以直接通过findviewById方法是不能得到该listview的实例的。
既然知道了findviewById()原理,那么就好办了!直接先通过LayoutInflater对象来实例化listview所在的布局,然后通过这个view的findviewById方法来获取listview的实例。
View
View
ListView
ListView
注意view对应的布局是hero_list,listview对应的布局是herolist,两者不一样。
也可以简化如下:
ListView listView1 = (ListView) (inflater.inflate(R.layout.hero_list, null)).findViewById(R.id.heroList);
ListView listView2 = (ListView) (inflater.inflate(R.layout.hero_list, null)).findViewById(R.id.heroList);
剩下的步骤3和步骤4和上文中的一样,重写PagerAdapter类并添加适配器。
不过不要忘了给每一个listview都添加一个适配器,listview添加SimpleAdapter的步骤我相信大家已经很熟悉了,这里就不再详述了,直接上代码:
这样就成功的将两个listview添加到ViewPager中了,以下是效果图,(水平有限,不知道怎么做动态的效果图)
在刚开始做这个的时候,也在网上搜索过关于在viewPager中添加listview的方法,都没有找到相关的教程,自己摸索了一天终于把它做出来了,这里和大家分享一下,也希望能给需要类似效果的朋友一些帮助。
第一次发帖,经验不足,可能代码有些注释写得不是很详细,有问题的可以留言,也可以加新浪微博发私信。
代码有错误的地方,也希望大家指正,轻喷,轻喷.