亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android RecyclerView詳解之實(shí)現(xiàn) ListView GridView瀑布流效果

 更新時(shí)間:2016年07月20日 15:39:00   作者:Mr_WangGang  
RecyclerView 是Android L版本中新添加的一個(gè)用來(lái)取代ListView的SDK,它的靈活性與可替代性比listview更好

 什么是RecyclerView

RecyclerView 是Google推出的最新的 替代ListView、GridView的組件,RecyclerView是用來(lái)顯示大量數(shù)據(jù)的容器,并通過(guò)有限數(shù)量的子View,來(lái)提高滾動(dòng)時(shí)的性能。

與ListView不同,RecyclerView 不再負(fù)責(zé)布局,而是專注于布局復(fù)用。布局主要通過(guò) LayoutManager來(lái)管理,目前提供了3種常用的布局管理:

LinearLayoutManager 線性布局管理器 (ListView效果)
GridLayoutManager 網(wǎng)格布局管理器 (GridView效果)
StaggeredGridLayoutManager 瀑布流管理器
RecyclerView 主要通過(guò)Adapter 來(lái)獲得要顯示的子View。Adapter要繼承RecyclerView.Adapter類,并且 需要制定一個(gè) RecyclerView.ViewHolder子類的泛型。

使用RecyclerView需要導(dǎo)包,需要在 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,當(dāng)有可復(fù)用View時(shí),就不再調(diào)用 
@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
View v = getLayoutInflater().inflate(R.layout.recycler_item, null); 
return new ViewHolder(v); 
} 
//將數(shù)據(jù)綁定到子View,會(huì)自動(dòng)復(fù)用View 
@Override 
public void onBindViewHolder(ViewHolder viewHolder, int i) { 
viewHolder.textView.setText(data[i]); 
} 
//RecyclerView顯示數(shù)據(jù)條數(shù) 
@Override 
public int getItemCount() { 
return data.length; 
} 
//自定義的ViewHolder,減少findViewById調(diào)用次數(shù) 
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); 
} 
} 
} 

注意:當(dāng)數(shù)據(jù)發(fā)生變化時(shí),可以通過(guò)notifyDataSetChanged來(lái)刷新UI,通過(guò)getItemViewType來(lái)獲取對(duì)應(yīng)位置的類型,但是它不再需要你指定有多少類型了,因?yàn)樵摲椒ㄒ呀?jīng)能夠判斷出有多少類型。

子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準(zhǔn)備好后,接下來(lái)就準(zhǔn)備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中,加入初始化、設(shè)置的代碼

@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); 
//設(shè)置適配器 
recylcer.setAdapter(new MyAdapter()); 
} 

運(yùn)行后的效果如下:

如果要顯示為 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); 

使用瀑布流時(shí),高度最好不一樣,所以可以隨機(jī)設(shè)置下子View的高度。修改Adapter中的方法

//將數(shù)據(jù)綁定到子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); 
} 

運(yùn)行效果如下:

以上所述是小編給大家介紹的Android RecyclerView詳解之實(shí)現(xiàn) ListView GridView瀑布流效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 如何在Android 中實(shí)現(xiàn)scp操作

    如何在Android 中實(shí)現(xiàn)scp操作

    這篇文章主要介紹了如何在Android 中實(shí)現(xiàn)scp操作,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03
  • 深入理解Kotlin的泛型系統(tǒng)

    深入理解Kotlin的泛型系統(tǒng)

    Kotlin 泛型即 “參數(shù)化類型”,將類型參數(shù)化,可以用在類,接口,方法上。下面 這篇文章主要給大家介紹了關(guān)于Kotlin泛型系統(tǒng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Android 超詳細(xì)SplashScreen入門教程

    Android 超詳細(xì)SplashScreen入門教程

    Android 12正式版即將發(fā)布,有一個(gè)非常顯著的視覺變化就是,Android 12強(qiáng)制給所有的App都增加了SplashScreen的功能。是的,即使你什么都不做,只要你的App安裝到了Android 12手機(jī)上,都會(huì)自動(dòng)擁有這個(gè)新功能
    2022-03-03
  • Android獲取經(jīng)緯度計(jì)算距離介紹

    Android獲取經(jīng)緯度計(jì)算距離介紹

    Android提供LocationManager和Location,可以方便的獲得經(jīng)緯度、海拔等位置。使用LocationManager來(lái)獲得位置管理類,從而可以獲得歷史GPS信息以及位置變化的監(jiān)聽注冊(cè);使用Location來(lái)獲得具體的位置信息
    2014-01-01
  • android開發(fā)之橫向滾動(dòng)/豎向滾動(dòng)的ListView(固定列頭)

    android開發(fā)之橫向滾動(dòng)/豎向滾動(dòng)的ListView(固定列頭)

    由于項(xiàng)目需要,我們需要一個(gè)可以橫向滾動(dòng)的,又可以豎向滾動(dòng)的 表格;經(jīng)過(guò)幾天的研究終于搞定,感興趣的朋友可以了解下哦
    2013-01-01
  • Android環(huán)形進(jìn)度條(安卓默認(rèn)形式)實(shí)例代碼

    Android環(huán)形進(jìn)度條(安卓默認(rèn)形式)實(shí)例代碼

    這篇文章主要介紹了Android環(huán)形進(jìn)度條(安卓默認(rèn)形式)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Android實(shí)現(xiàn)雙層ViewPager嵌套

    Android實(shí)現(xiàn)雙層ViewPager嵌套

    這篇文章主要介紹了Android實(shí)現(xiàn)雙層ViewPager嵌套,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Android開發(fā)實(shí)現(xiàn)錄屏小功能

    Android開發(fā)實(shí)現(xiàn)錄屏小功能

    這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)錄屏小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • flutter圖片組件核心類源碼解析

    flutter圖片組件核心類源碼解析

    這篇文章主要為大家介紹了flutter圖片組件源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • RxJava2 線程調(diào)度的方法

    RxJava2 線程調(diào)度的方法

    這篇文章主要介紹了RxJava2 線程調(diào)度的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03

最新評(píng)論