功能強(qiáng)大的Android滾動(dòng)控件RecyclerView
RecyclerView的使用比ListView的使用是比較復(fù)雜的,ListView的使用是五個(gè)步驟,而我們的RecyclerView的使用有7個(gè)步驟,分別為:
1.在當(dāng)前項(xiàng)目的build.gradle中的dependencies閉包中加入compile ‘com.android.support.recyclerview-v7:xx.x.x'(x是當(dāng)前最新版本)
2.布局加入RecyclerView控件以及創(chuàng)建子項(xiàng)布局和適配器類。
3.創(chuàng)建適配器
4.定義數(shù)據(jù)源
5.通過findViewById找RecylerView列表控件
6.通過setLayoutManager()為RecylerView設(shè)置布局管理器
7.通過setAdapter()設(shè)置適配器**
下面我們就利用代碼或圖片一一的細(xì)說每個(gè)步驟:
**第一步:在當(dāng)前項(xiàng)目的build.gradle中的dependencies閉包中加入compile ‘com.android.support.recyclerview-v7:xx.x.x'(x是當(dāng)前最新版本)。
因?yàn)锳ndroid將RecyclerView定義在support庫(kù)中,想要使用該控件就必須要添加相應(yīng)的依賴庫(kù)才可以的。所以就有了第一步的操作。咱們這里介紹兩種添加庫(kù)依賴的方法:**
1.直接在文件中手動(dòng)添加,步驟也是用手動(dòng)添加:
添加完成后記得保存,然后點(diǎn)擊以下Sync Now進(jìn)行同步。 什么?什么?Sync Now不知道在哪里?0.0
2.打開布局文件:
當(dāng)系統(tǒng)添加完的時(shí)候,你會(huì)發(fā)現(xiàn)布局界面還是沒有任何東西,別著急!這時(shí)候你在次在選項(xiàng)欄中拖取RecyclerView控件到布局,你會(huì)發(fā)現(xiàn)出現(xiàn)以下界面,證明添加庫(kù)依賴成功,可以使用RecyclerView控件:
相對(duì)第一種方法,第二種方法是比較便捷的,可以不需要手動(dòng)輸入和知道當(dāng)前版本,較少了出錯(cuò)率。
第二步:布局加入RecyclerView控件以及創(chuàng)建子項(xiàng)布局和適配器類。其實(shí)第一步咋們已經(jīng)說過了,直接拖取控件到布局界面就行了。
- 那我們就去布局代碼看看,你會(huì)在布局代碼中發(fā)現(xiàn)如下代碼片段:
小伙伴們,發(fā)現(xiàn)其中的特點(diǎn)沒有?對(duì)的,就是RecyclerView怎么跟咱們的Button、TextView等控件的頭部標(biāo)簽寫法不一樣的啊?那是因?yàn)镽ecyclerView 并不是內(nèi)置在系統(tǒng)SDK當(dāng)中,所以需要把完整的包路徑名android.support.v7.widget.RecyclerView寫出來)。
注:直接拖取是沒有生成ID的,這里需要我們手動(dòng)添加,如果是手動(dòng)添加RecyclerView的小伙伴們記得要把完成包名路徑寫出來。
在布局文件中我們需要?jiǎng)?chuàng)建一個(gè)RecyclerView的子項(xiàng)布局,代碼如下:
實(shí)現(xiàn)的預(yù)覽效果,我們?cè)谶@里讓界面實(shí)現(xiàn)左邊是圖片,右邊是文字:
咱們創(chuàng)建一個(gè)Fruit實(shí)體類,并添加構(gòu)造器和重寫get()方法:
最后創(chuàng)建一個(gè)FruitAdapter適配器的類,讓適配器繼承RecyclerView.Adapter,并將泛型指定為FruitAdapter.ViewHolder。其中,ViewHolder是我們FruitAdapter中定義的一個(gè)內(nèi)部類。并重寫:onCreateViewHolder()、onBindViewHolder()、getItemCount()3個(gè)方法。全部代碼如下:
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { //定義集合 private List<Fruit> mFruitList; //利用構(gòu)造器傳入數(shù)據(jù) public FruitAdapter(List<Fruit> FruitList) { this.mFruitList = FruitList; } //創(chuàng)建ViewHolder的實(shí)例 // ①onCreateViewHolder()用于創(chuàng)建ViewHolder實(shí)例,并把加載的布局傳入到構(gòu)造函數(shù) @Override public FruitAdapet.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //由于ViewHolder構(gòu)造器需要傳入子項(xiàng)布局View對(duì)象,因此需要實(shí)例化子項(xiàng)布局 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_fruit, parent, false); //創(chuàng)建ViewHolder對(duì)象 ViewHolder viewHolder = new ViewHolder(view); //返回值 return viewHolder; } //②onBindViewHolder()用于對(duì)RecyclerView子項(xiàng)的數(shù)據(jù)進(jìn)行賦值,會(huì)在每個(gè)子項(xiàng)被滾動(dòng)到屏幕內(nèi)的時(shí)候執(zhí)行 @Override public void onBindViewHolder(final FruitAdapet.ViewHolder holder, int position) { //從集合中把水果對(duì)象拿出來 Fruit fruit = mFruitList.get(position); //調(diào)用holder.ImageView對(duì)象設(shè)置圖片 holder.imageView.setImageResource(fruit.getImageId()); //調(diào)用holder.TextView對(duì)象設(shè)置文字 holder.textView.setText(fruit.getName()); } //③getItemCount()用于知道RecyclerView有多少子項(xiàng) @Override public int getItemCount() { return mFruitList.size(); } //創(chuàng)建ViewHolder繼承RecyclerView.ViewHolder class ViewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textView; //重寫ViewHolder public ViewHolder(View itemView) { super(itemView); //通過View對(duì)象的findViewById方法獲取到子項(xiàng)布局的控件保存在成員變量當(dāng)中 imageView = (ImageView) itemView.findViewById(R.id.imageView); textView = (TextView) itemView.findViewById(R.id.textView); } } }
以上就是適配器FruitAdapter的代碼,代碼都有注釋,相信小伙伴們都可以理解的!
最后的步驟都是在MainActivity中編寫的,咱們這里就不分開一一解釋了,直接貼上代碼,這樣更能一目了然,每個(gè)代碼都有注釋,相信不難理解:
3.在MainActivity中定義數(shù)據(jù)源 4定義適配器
5.通過findViewById找RecylerView列表控件
6.通過setLayoutManager()為RecylerView設(shè)置布局管理器
7.創(chuàng)建適配器
8.通過setAdapter()設(shè)置適配器
public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //第三步:定義數(shù)據(jù)源,單獨(dú)利用一個(gè)方法 fruitData(); //第四步:創(chuàng)建適配器 FruitAdapet adapet = new FruitAdapet(fruitList); //第五步:找布局控件 RecyclerView recyclerView= (RecyclerView) findViewById(R.id.recyclerView); //第六步:通過setLayoutManager()為RecylerView設(shè)置布局管理器 //設(shè)置為垂直方向 //水平方向的參數(shù)為:(this,LinearLayoutManager.HORIZONTAL, false); LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false); recyclerView.setLayoutManager(linearLayoutManager); //第七步:設(shè)置適配器 recyclerView.setAdapter(adapet); } public void fruitData() { //創(chuàng)建一個(gè)集合保存數(shù)據(jù) fruitList = new ArrayList<>(); //圖片我就用了幾張,然后讓他循環(huán)變換而已,小伙伴可以自己增加各式的圖片 Fruit apple = new Fruit("蘋果", R.drawable.apple); fruitList.add(apple); Fruit banana = new Fruit("香蕉", R.drawable.banana); fruitList.add(banana); Fruit apple1 = new Fruit("蘋果", R.drawable.apple); fruitList.add(apple); Fruit banana1 = new Fruit("香蕉", R.drawable.banana); fruitList.add(banana); Fruit apple2 = new Fruit("蘋果", R.drawable.apple); fruitList.add(apple); Fruit banana2 = new Fruit("香蕉", R.drawable.banana); fruitList.add(banana); Fruit apple3 = new Fruit("蘋果", R.drawable.apple); fruitList.add(apple); Fruit banana3 = new Fruit("香蕉", R.drawable.banana); fruitList.add(banana); Fruit apple4 = new Fruit("蘋果", R.drawable.apple); fruitList.add(apple); Fruit banana4 = new Fruit("香蕉", R.drawable.banana); fruitList.add(banana); } }
好了,RecyclerView的基本代碼就這這樣的,大家僅供參考。
其實(shí)RecyclerView還有點(diǎn)擊事件的,我這里就沒有寫了。如果后期小伙伴們需要可以添加上去。
其實(shí)這個(gè)也是實(shí)現(xiàn)瀑布流效果的代碼,如果咱們想要實(shí)現(xiàn)瀑布流效果,只需要把子項(xiàng)布局設(shè)置為只顯示圖片(瀑布流需要使用大小不同的圖片才能看出更好的效果),并調(diào)整一下布局參數(shù)就行了的。在布局設(shè)置布局管理中設(shè)置如下代碼:
//第一個(gè)參數(shù)用于指定布局的列數(shù) //第二個(gè)參數(shù)用于指定布局的排列方向 StaggeredGridLayoutManager layoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager);
對(duì)了運(yùn)行的效果如下,可以實(shí)現(xiàn)上下滾動(dòng):
謝謝大家閱讀,本文僅供參考,有疑問或錯(cuò)誤請(qǐng)大家指出,謝謝。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- RecyclerView實(shí)現(xiàn)抖音縱向滾動(dòng)ViewPager效果
- Android 基于RecyclerView實(shí)現(xiàn)的歌詞滾動(dòng)自定義控件
- Android RecyclerView 滾動(dòng)到中間位置的方法示例
- 淺談Android RecyclerView UI的滾動(dòng)控件示例
- Android RecyclerView 實(shí)現(xiàn)快速滾動(dòng)的示例代碼
- Android使用Recyclerview實(shí)現(xiàn)圖片水平自動(dòng)循環(huán)滾動(dòng)效果
- XRecyclerView實(shí)現(xiàn)下拉刷新、滾動(dòng)到底部加載更多等功能
- Android_RecyclerView實(shí)現(xiàn)上下滾動(dòng)廣告條實(shí)例(帶圖片)
- Android中RecyclerView實(shí)現(xiàn)分頁(yè)滾動(dòng)的方法詳解
- Android RecyclerView滾動(dòng)定位
- Android使用RecyclerView實(shí)現(xiàn)水平滾動(dòng)控件
- Android代碼實(shí)現(xiàn)AdapterViews和RecyclerView無(wú)限滾動(dòng)
- RecyclerView實(shí)現(xiàn)縱向和橫向滾動(dòng)
相關(guān)文章
Android第三方文件選擇器aFileChooser使用方法詳解
這篇文章主要介紹了Android第三方文件選擇器aFileChooser的使用方法詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android監(jiān)聽輸入法彈窗和關(guān)閉的實(shí)現(xiàn)方法
用過ios的都知道ios上輸入法關(guān)閉的同時(shí)會(huì)自動(dòng)關(guān)閉輸入框,那么在android上如何實(shí)現(xiàn)監(jiān)聽輸入法彈出和關(guān)閉呢?接下來通過本文給大家分享一種可靠的實(shí)現(xiàn)方式2016-11-11Android Studio自動(dòng)生成UML關(guān)系圖的方法步驟
本文主要介紹了Android Studio自動(dòng)生成UML關(guān)系圖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08android開發(fā) eclipse alt+”/”自動(dòng)提示失效的解決方法
最近在學(xué)習(xí)android開發(fā)布局這塊。第一次學(xué)習(xí),很多代碼不熟悉。所以自動(dòng)提示對(duì)我來說很重要。但悲催的就是這個(gè)自動(dòng)提示失效。今天在網(wǎng)上搜索了一下解決辦法,主要有一下幾種方法2014-05-05Android中TextureView與SurfaceView用法區(qū)別總結(jié)
TextureView和SurfaceView都是繼承自View類的,TextureView在Andriod4.0之后才引入的,SurfaceView不能加上動(dòng)畫、平移、縮放,TextureView可以但有1-3幀的延遲2018-04-04Android 實(shí)現(xiàn)抖音頭像底部彈框效果的實(shí)例代碼
這篇文章主要介紹了Android 實(shí)現(xiàn)抖音頭像底部彈框效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Android使用Kotlin API實(shí)踐WorkManager
這篇文章主要介紹了Android使用Kotlin API實(shí)踐WorkManager的步驟,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04Android入門之利用Spinner實(shí)現(xiàn)彈出選擇對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android里如何巧用Spinner做彈出選擇對(duì)話框,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2022-11-11