实现顶部轮播,下部listview经典布局的两种方式
2015-05-21 16:03
316 查看
开头:
在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目。很多新闻app,视频类app都采用这样的布局。起初的时候由于没有很多参考,我自己想到了一种实现方式,就是用scrollview作为外面最大的布局,然后里面嵌套viewpager和listview,但是我现在非常不推荐这种方式,一方面由于这种方式
需要将listview完全展开,缺少了getview函数中应该有的复用与优化。而且结构嵌套复杂。经过一番查找与学习,学习到两种比较规范或者结构比较清晰的实现方式,那么下面,我来分别介绍
一下这两种方式。
转载请注明出处 http://www.cnblogs.com/gaoteng/p/4162749.html www.gaotenglife.com
方法一:listview的addheadview方法
首先我们新建一个布局文件,存放listview,如下然后顶部的轮播图,我们采用viewpager的方式去实现。同样新建一个布局,里面存放viewpager
那么接下来,viewpager需要一个adapter来填充数据,这里我们的数据,就是一些图片,让viewpager去展示。
我们再新建一个自己的viewpageradapter,这个adapger在后面的另一种实现方式中也会用到,所以,单独建立一个文件存放。
下面是代码:
下面便是acitivity中的主要代码(在文章的结尾,我会附加源代码的下载地址,有需要的可以下载详细看)
简单解释一下上面的内容:
方法二:viewpager作为listview的一个item
这种方式是我受到别的文章的启发,一个listview可以指定它每一个item为不同的布局类型,从而实现listview的多元化,那么我们同样可以利用这个方法。把listview的第一项初始化为viewpager,这样不也就实现了顶部时viewpager的效果了嘛。说干就干,代码继续码起来。
在这种方式中,最主要的内容部分就在listview的adapter中。所以我也就主要介绍这一个adapter,我相信,看懂了这个adapter,那么其他部分,自然很容易理解了。
在官方api中提供了下面这两个方法,这也是今天实现这个功能主要的两个方法。
getViewTypeCount //用来返回在这个listview中有几种不同的item类型
getItemViewType //用来返回某个具体位置上面的item的类型()
接下来便是这个功能最最重要的一个函数getview,因为我们将在这个函数中做所有的显示工作。
我们先把代码附上,然后详细介绍。
下面我来详细说明一下上面的函数。其实基本的骨架大家应该都能看懂。使用了listview复用的概念。
然后再判断convertView是否为空,来决定是否复用。
如果为空,说明在内存中没有保留过,于是通过LayoutInflate创建view,同时我们创建了一个
然后创建好viewpager的数据List<ImageView> data,使用前面的ViewPageAdapter,将数据与viewpager绑定,然后用settag的方式,把holder数据,保存到view里面。
当判断convertview不为空的时候,我们从convertview中取出tag,转换为holder,然后就又得到了viewpager对象了。
这是if(getItemViewType(position) == 1)的情况。
那么if(getItemViewType(position) == 0)的情况就更简单了,基本上和这类似。
也是复用了convertview,然后通过holder的方式,将view对象保存起来,不用下一次通过findviewbyid的方式来查找了,提高了效率。
转载请注明出处 http://www.cnblogs.com/gaoteng/p/4162749.html www.gaotenglife.com
下面附上源码下载地址
csdn资源
http://download.csdn.net/detail/gaotengguojianhong/8308407
github资源
https://github.com/langxuelang/ListViewDemo
相关文章推荐
- 实现顶部轮播,下部listview经典布局的两种方式
- 实现顶部轮播,下部listview经典布局的两种方式
- 实现顶部轮播,下部listview经典布局的两种方式
- 实现顶部轮播,下部listview经典布局的两种方式
- 实现顶部轮播,下部listview经典布局的两种方式
- 实现顶部轮播,下部listview经典布局的两种方式
- ListView实现下拉刷新-2-将顶部布局加载到ListView中
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- android 实现listview的adapter多种布局方式
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- 实现瀑布流布局效果两种方式
- CSS float的初步理解:用两种不同的方式来实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化
- Android:如何在ListView中嵌套ListView (如何实现二级目录结构?)的两种实现方式
- listview中的radiobutton实现单选的两种方式而且可以控制另一控件button的是否可见
- viewpager实现无限轮播的两种方式总结
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- ListView实现下拉刷新-3-将顶部布局动态的显示出来
- js实现轮播图的两种方式(构造函数、面向对象)
- Fragment与Radiogroup联动,经典的主界面布局。使用show和hide的方式实现;