欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

 什么是RecyclerView

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

與ListView不同,RecyclerView 不再負責布局,而是專注于布局復用。布局主要通過 LayoutManager來管理,目前提供了3種常用的布局管理:

LinearLayoutManager 線性布局管理器 (ListView效果)
GridLayoutManager 網(wǎng)格布局管理器 (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); 
} 
//將數(shù)據(jù)綁定到子View,會自動復用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調用次數(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); 
} 
} 
} 

注意:當數(shù)據(jù)發(fā)生變化時,可以通過notifyDataSetChanged來刷新UI,通過getItemViewType來獲取對應位置的類型,但是它不再需要你指定有多少類型了,因為該方法已經(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準備好后,接下來就準備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中的方法

//將數(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); 
} 

運行效果如下:

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

相關文章

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

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

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

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

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

    Android 超詳細SplashScreen入門教程

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

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

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

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

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

    Android環(huán)形進度條(安卓默認形式)實例代碼

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

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

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

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

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

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

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

    RxJava2 線程調度的方法

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

最新評論