当前位置: 移动技术网 > IT编程>移动开发>Android > Android RecyclerView详解之实现 ListView GridView瀑布流效果

Android RecyclerView详解之实现 ListView GridView瀑布流效果

2019年07月24日  | 移动技术网IT编程  | 我要评论

中创生态仪,2010年春节联欢晚会下载,劳模赖账700余万

 什么是recyclerview

recyclerview 是google推出的最新的 替代listview、gridview的组件,recyclerview是用来显示大量数据的容器,并通过有限数量的子view,来提高滚动时的性能。

与listview不同,recyclerview 不再负责布局,而是专注于布局复用。布局主要通过 layoutmanager来管理,目前提供了3种常用的布局管理:

linearlayoutmanager 线性布局管理器 (listview效果)
gridlayoutmanager 网格布局管理器 (gridview效果)
staggeredgridlayoutmanager 瀑布流管理器
recyclerview 主要通过adapter 来获得要显示的子view。adapter要继承recyclerview.adapter类,并且 需要制定一个 recyclerview.viewholder子类的泛型。

使用recyclerview需要导包,需要在 build.gradle上加入依赖

dependencies { 
compile filetree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.3' 
compile 'com.android.support:recyclerview-v7:21.0.3' 
... 
} 

代码如下:

//继承自 recyclerview.adapter 
class myadapter extends recyclerview.adapter<myadapter.viewholder> { 
//recyclerview显示的子view 
//该方法返回是viewholder,当有可复用view时,就不再调用 
@override 
public viewholder oncreateviewholder(viewgroup viewgroup, int i) { 
view v = getlayoutinflater().inflate(r.layout.recycler_item, null); 
return new viewholder(v); 
} 
//将数据绑定到子view,会自动复用view 
@override 
public void onbindviewholder(viewholder viewholder, int i) { 
viewholder.textview.settext(data[i]); 
} 
//recyclerview显示数据条数 
@override 
public int getitemcount() { 
return data.length; 
} 
//自定义的viewholder,减少findviewbyid调用次数 
class viewholder extends recyclerview.viewholder { 
textview textview; 
imageview imageview; 
//在布局中找到所含有的ui组件 
public viewholder(view itemview) { 
super(itemview); 
textview = (textview) itemview.findviewbyid(r.id.textview); 
imageview = (imageview) itemview.findviewbyid(r.id.imageview); 
} 
} 
} 

注意:当数据发生变化时,可以通过notifydatasetchanged来刷新ui,通过getitemviewtype来获取对应位置的类型,但是它不再需要你指定有多少类型了,因为该方法已经能够判断出有多少类型。

子view布局如下:res/layout/recycler

<?xml version="1.0" encoding="utf-8"?> 
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<imageview 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/imageview" 
android:src="@drawable/ic_launcher" /> 
<textview 
android:layout_width="wrap_content" 
android:layout_height="match_parent" 
android:text="medium text" 
android:layout_marginleft="5dp" 
android:gravity="center_vertical" 
android:id="@+id/textview" /> 
</linearlayout> 

adapter准备好后,接下来就准备recyclerview。在activity的布局中加入recyclerview

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".mainactivity"> 
<android.support.v7.widget.recyclerview 
android:id="@+id/recyclerview" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 
</relativelayout> 

然后在activity中,加入初始化、设置的代码

@override 
protected void oncreate(bundle savedinstancestate) { 
super.oncreate(savedinstancestate); 
setcontentview(r.layout.activity_main); 
//找到 recyclerview 
recyclerview recylcer = (recyclerview) findviewbyid(r.id.recyclerview); 
//listview效果的 linearlayoutmanager 
linearlayoutmanager mgr = new linearlayoutmanager(this); 
//vertical纵向,类似listview,horizontal<span style="font-family: arial, helvetica, sans-serif;">横向,类似gallery</span> 
mgr.setorientation(linearlayoutmanager.vertical); 
recylcer.setlayoutmanager(mgr); 
//设置适配器 
recylcer.setadapter(new myadapter()); 
} 

运行后的效果如下:

如果要显示为 gridview效果,只用把linearlayoutmanager 换成 gridlayoutmanager

//gridlayout 3列 
gridlayoutmanager mgr=new gridlayoutmanager(this,3); 
recylcer.setlayoutmanager(mgr); 

效果如下:

如果要显示效果为 瀑布流,则需要换成 staggeredgridlayoutmanager。

//3列 方向垂直 
staggeredgridlayoutmanager mgr = new staggeredgridlayoutmanager(3, staggeredgridlayoutmanager.vertical); 
recylcer.setlayoutmanager(mgr); 

使用瀑布流时,高度最好不一样,所以可以随机设置下子view的高度。修改adapter中的方法

//将数据绑定到子view 
@override 
public void onbindviewholder(viewholder viewholder, int i) { 
viewholder.textview.settext(data[i]); 
linearlayout.layoutparams lp = new linearlayout.layoutparams( 
linearlayout.layoutparams.match_parent, 
<span style="white-space:pre"> </span>100+(int) (math.random() * 50)); 
viewholder.imageview.setlayoutparams(lp); 
} 

运行效果如下:

以上所述是小编给大家介绍的android recyclerview详解之实现 listview gridview瀑布流效果,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网