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

Android入門教程之RecyclerView的具體使用詳解

 更新時(shí)間:2021年10月09日 09:30:40   作者:低吟不作語  
RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動(dòng),也可以實(shí)現(xiàn)橫向滾動(dòng)(ListView做不到橫向滾動(dòng))。接下來講解RecyclerView的用法

RecyclerView 的基本用法

和我們之前學(xué)習(xí)的控件不一樣,RecyclerView 屬于新增控件,所以我們需要在項(xiàng)目的 build.gradle 中添加 RecyclerView 庫的依賴,才能使用該控件

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

修改 activity_main.xml 中的代碼,如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

這里我們想要使用 RecyclerView 實(shí)現(xiàn)了 ListView 一樣的效果,準(zhǔn)備一個(gè)適配器,新建 FruitAdapter 類,讓這個(gè)適配器繼承 RecyclerView.Adapter,并將泛型指定為 FruitAdapter.ViewHolder,其中 ViewHolder 是我們?cè)?FruitAdapter 中定義的一個(gè)內(nèi)部類

class FruitAdapter(val fruitList: List<Fruit>) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {

    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val fruitImage: ImageView = view.findViewById(R.id.fruitImage)
        val fruitName: TextView = view.findViewById(R.id.fruitName)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FruitAdapter.ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.fruit_item, parent, false)
        return ViewHolder(view)
    }

    override fun getItemCount() = fruitList.size

    override fun onBindViewHolder(holder: FruitAdapter.ViewHolder, position: Int) {
        val fruit = fruitList[position]
        holder.fruitImage.setImageResource(fruit.imageId)
        holder.fruitName.text = fruit.name
    }
}

首先,我們定義一個(gè)內(nèi)部類 ViewHolder,繼承自 RecyclerView.ViewHolder,然后 ViewHolder 的主構(gòu)造函數(shù)中傳入一個(gè) View 參數(shù),這個(gè)參數(shù)通常是 RecyclerView 子項(xiàng)的最外層布局,然后我們就可以通過 findViewById() 方法來獲取布局中的 ImageView 和 TextView 實(shí)例了

FruitAdapter 繼承自 RecyclerView.Adapter,那么就必須重寫 onCreateViewHolder()、onBindViewHolder()、getItemCount() 這三個(gè)方法:

  • onCreateViewHolder() 方法用于創(chuàng)建 ViewHolder 實(shí)例
  • onBindViewHolder() 方法用于對(duì) RecyclerView 子項(xiàng)的數(shù)據(jù)進(jìn)行賦值
  • getItemCount() 方法告訴 RecyclerView 一共有多少個(gè)子項(xiàng),直接返回?cái)?shù)據(jù)源的長度

修改 MainActivity 中的代碼,開始使用 RecyclerView

class MainActivity : AppCompatActivity() {

    private val fruitList = ArrayList<Fruit>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initFruits()
        val layoutManager = LinearLayoutManager(this)
        recyclerView.layoutManager = layoutManager
        val adapter = FruitAdapter(fruitList)
        recyclerView.adapter = adapter
    }

    private fun initFruits() {
        repeat(2) {
            fruitList.add(Fruit("Apple", R.drawable.apple_pic))
            fruitList.add(Fruit("Banana", R.drawable.banana_pic))
            fruitList.add(Fruit("Orange", R.drawable.orange_pic))
            fruitList.add(Fruit("Watermelon", R.drawable.watermelon_pic))
            fruitList.add(Fruit("Pear", R.drawable.pear_pic))
            fruitList.add(Fruit("Grape", R.drawable.grape_pic))
            fruitList.add(Fruit("Pineapple", R.drawable.pineapple_pic))
            fruitList.add(Fruit("Strawberry", R.drawable.strawberry_pic))
            fruitList.add(Fruit("Cherry", R.drawable.cherry_pic))
            fruitList.add(Fruit("Mango", R.drawable.mango_pic))
        }
    }
}

在 onCreate() 方法中先創(chuàng)建一個(gè) LinearLayoutManager 對(duì)象,并設(shè)置到 RecyclerView 中,用于指定 RecyclerView 的布局方式。然后再創(chuàng)建 FruitAdapter 的實(shí)例,調(diào)用 RecyclerView 的 setAdapter() 方法完成適配器設(shè)置

在這里插入圖片描述

橫向滾動(dòng)

如果我們要實(shí)現(xiàn)橫向滾動(dòng)的話,要先對(duì) fruit_item 的布局進(jìn)行修改,把里面的元素改成垂直排列

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    tools:ignore="UseCompoundDrawables">

    <ImageView
        android:id="@+id/fruitImage"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        tools:ignore="ContentDescription,RtlHardcoded" />

    <TextView
        android:id="@+id/fruitName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        tools:ignore="RtlHardcoded" />

</LinearLayout>

接下來修改 MainActivity 中的代碼

class MainActivity : AppCompatActivity() {

    private val fruitList = ArrayList<Fruit>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initFruits()
        val layoutManager = LinearLayoutManager(this)
        layoutManager.orientation = LinearLayoutManager.HORIZONTAL
        recyclerView.layoutManager = layoutManager
        val adapter = FruitAdapter(fruitList)
        recyclerView.adapter = adapter
    }

	...
}

在這里插入圖片描述

除了橫向滾動(dòng),RecyclerView 還能實(shí)現(xiàn)瀑布流和網(wǎng)格布局

RecyclerView 點(diǎn)擊事件

不同于 ListView,RecyclerView 并沒有提供類似于 setOnItemClickListener() 這樣的注冊(cè)監(jiān)聽器方法,而是需要我們自己給子項(xiàng)具體的 View 注冊(cè)點(diǎn)擊事件

修改 FruitAdapter 中的代碼

class FruitAdapter(val fruitList: List<Fruit>) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {

    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val fruitImage: ImageView = view.findViewById(R.id.fruitImage)
        val fruitName: TextView = view.findViewById(R.id.fruitName)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FruitAdapter.ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.fruit_item, parent, false)
        val viewHolder = ViewHolder(view)
        viewHolder.itemView.setOnClickListener {
            val position = viewHolder.adapterPosition
            Log.d("FruitAdapter", position.toString())
            val fruit = fruitList[position]
            Toast.makeText(parent.context, "you clicked view ${fruit.name}", Toast.LENGTH_SHORT).show()
        }
        viewHolder.fruitImage.setOnClickListener {
            val position = viewHolder.adapterPosition
            Log.d("FruitAdapter", position.toString())
            val fruit = fruitList[position]
            Toast.makeText(parent.context, "you clicked image ${fruit.name}", Toast.LENGTH_SHORT).show()
        }
        return viewHolder
    }

    override fun getItemCount() = fruitList.size

    override fun onBindViewHolder(holder: FruitAdapter.ViewHolder, position: Int) {
        val fruit = fruitList[position]
        holder.fruitImage.setImageResource(fruit.imageId)
        holder.fruitName.text = fruit.name
    }
}

到此這篇關(guān)于Android入門教程之RecyclerView的具體使用詳解的文章就介紹到這了,更多相關(guān)Android RecyclerView內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android數(shù)據(jù)雙向綁定原理實(shí)現(xiàn)和應(yīng)用場景

    Android數(shù)據(jù)雙向綁定原理實(shí)現(xiàn)和應(yīng)用場景

    本文介紹了Android數(shù)據(jù)雙向綁定的原理和實(shí)現(xiàn)方式,包括基于觀察者模式和數(shù)據(jù)綁定框架的實(shí)現(xiàn)方法,以及應(yīng)用場景和優(yōu)缺點(diǎn)的分析,幫助開發(fā)者了解和應(yīng)用數(shù)據(jù)雙向綁定技術(shù),提升應(yīng)用的交互性和響應(yīng)速度
    2023-04-04
  • Android實(shí)現(xiàn)繞球心旋轉(zhuǎn)的引導(dǎo)頁效果

    Android實(shí)現(xiàn)繞球心旋轉(zhuǎn)的引導(dǎo)頁效果

    本篇文章主要介紹了Android實(shí)現(xiàn)繞球心旋轉(zhuǎn)的引導(dǎo)頁效果,想要實(shí)現(xiàn)此效果的同學(xué)可以參考一下本文。
    2016-11-11
  • android實(shí)現(xiàn)滾動(dòng)文本效果

    android實(shí)現(xiàn)滾動(dòng)文本效果

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)滾動(dòng)文本效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • android實(shí)現(xiàn)簡單的活動(dòng)轉(zhuǎn)盤

    android實(shí)現(xiàn)簡單的活動(dòng)轉(zhuǎn)盤

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡單的活動(dòng)轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android使用BottomNavigationBar實(shí)現(xiàn)底部導(dǎo)航欄

    Android使用BottomNavigationBar實(shí)現(xiàn)底部導(dǎo)航欄

    這篇文章主要為大家詳細(xì)介紹了Android使用BottomNavigationBar實(shí)現(xiàn)底部導(dǎo)航欄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Android中外接鍵盤的檢測的實(shí)現(xiàn)

    Android中外接鍵盤的檢測的實(shí)現(xiàn)

    這篇文章主要介紹了Android中外接鍵盤的檢測的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Android UI自定義ListView實(shí)現(xiàn)下拉刷新和加載更多效果

    Android UI自定義ListView實(shí)現(xiàn)下拉刷新和加載更多效果

    這篇文章主要介紹了Android UI自定義ListView實(shí)現(xiàn)下拉刷新和加載更多效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android實(shí)現(xiàn)上傳圖片功能

    Android實(shí)現(xiàn)上傳圖片功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)上傳圖片功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Android中Activity的啟動(dòng)模式及應(yīng)用場景

    詳解Android中Activity的啟動(dòng)模式及應(yīng)用場景

    今天給大家介紹下安卓開發(fā)中不得不涉及的Activity啟動(dòng)模式及應(yīng)用場景,Activity一共有四種啟動(dòng)模式,分別是Standard模式、SingleTop模式、SingleTask模式以及SingleInstance模式,,需要的朋友可以參考下
    2023-09-09
  • Android 側(cè)滑抽屜菜單的實(shí)現(xiàn)代碼

    Android 側(cè)滑抽屜菜單的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android 側(cè)滑抽屜菜單的實(shí)現(xiàn)代碼,本文通過實(shí)例圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論