Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में कोटलिन का उपयोग करके RecyclerView के साथ एंडलेस लिस्ट कैसे इम्प्लीमेंट करें

एंड्रॉइड में कोटलिन का उपयोग करके RecyclerView के साथ एंडलेस लिस्ट इम्प्लीमेंट करना

यह उदाहरण दर्शाता है कि एंड्रॉइड में कोटलिन का उपयोग करके RecyclerView के साथ एंडलेस (अनंत) लिस्ट कैसे इम्प्लीमेंट की जाए।

चरण 1 - नया प्रोजेक्ट बनाएं

एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं: File → New Project पर जाएं और सभी आवश्यक विवरण भरकर नया प्रोजेक्ट बनाएं।

चरण 2 - आइटम लेआउट (item_row.xml) बनाएं

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardElevation="2dp"
    app:cardUseCompatPadding="true">

    <TextView
        android:id="@+id/textViewItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:textColor="@android:color/holo_blue_bright"
        android:textStyle="bold" />

</androidx.cardview.widget.CardView>

चरण 3 - लोडिंग लेआउट (item_loading.xml) बनाएं

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:indeterminate="true"
        android:paddingLeft="8dp"
        android:paddingRight="8dp" />

</LinearLayout>

चरण 4 - MainActivity.kt में कोड जोड़ें

import android.os.Bundle
import android.os.Handler
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {
    lateinit var recyclerView: RecyclerView
    lateinit var recyclerViewAdapter: RecyclerViewAdapter
    var rowsArrayList: ArrayList<String> = ArrayList()
    var isLoading = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        recyclerView = findViewById(R.id.recyclerView)
        populateData()
        initAdapter()
        initScrollListener()
    }

    private fun initScrollListener() {
        recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager?
                if (!isLoading) {
                    if (linearLayoutManager != null && linearLayoutManager.findLastCompletelyVisibleItemPosition() == rowsArrayList.size - 1) {
                        loadMore()
                        isLoading = true
                    }
                }
            }
        })
    }

    private fun initAdapter() {
        recyclerViewAdapter = RecyclerViewAdapter(rowsArrayList)
        recyclerView.layoutManager = LinearLayoutManager(applicationContext)
        recyclerView.adapter = recyclerViewAdapter
    }

    private fun populateData() {
        for (i in 0..9) {
            rowsArrayList.add("Number $i")
        }
    }

    private fun loadMore() {
        rowsArrayList.add(null.toString())
        recyclerViewAdapter.notifyItemInserted(rowsArrayList.size - 1)
        val handler = Handler()
        handler.postDelayed(Runnable {
            rowsArrayList.removeAt(rowsArrayList.size - 1)
            val scrollPosition = rowsArrayList.size
            recyclerViewAdapter.notifyItemRemoved(scrollPosition)
            var currentSize = scrollPosition
            val nextLimit = currentSize + 10
            while (currentSize - 1 < nextLimit) {
                rowsArrayList.add("Number $currentSize")
                currentSize++
            }
            recyclerViewAdapter.notifyDataSetChanged()
            isLoading = false
        }, 2000)
    }
}

चरण 5 - RecyclerViewAdapter.kt क्लास बनाएं

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ProgressBar
import android.widget.TextView
import androidx.annotation.NonNull
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder

class RecyclerViewAdapter internal constructor(private val itemList: List<String>) : RecyclerView.Adapter<ViewHolder>() {
    private val viewItemType = 0

    @NonNull
    override fun onCreateViewHolder(@NonNull parent: ViewGroup, viewType: Int): ViewHolder {
        return if (viewType == viewItemType) {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_row, parent, false)
            ItemViewHolder(view)
        } else {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_loading, parent, false)
            LoadingViewHolder(view)
        }
    }

    override fun onBindViewHolder(@NonNull viewHolder: ViewHolder, position: Int) {
        if (viewHolder is ItemViewHolder) {
            populateItemRows(viewHolder, position)
        } else if (viewHolder is LoadingViewHolder) {
            showLoadingView(viewHolder, position)
        }
    }

    override fun getItemViewType(position: Int): Int {
        return viewItemType
    }

    private inner class ItemViewHolder internal constructor(@NonNull itemView: View) : ViewHolder(itemView) {
        internal var tvItem: TextView = itemView.findViewById(R.id.textViewItem)
    }

    private class LoadingViewHolder internal constructor(itemView: View) : ViewHolder(itemView) {
        var progressBar: ProgressBar = itemView.findViewById(R.id.progressBar)
    }

    override fun getItemCount(): Int {
        return itemList.size
    }

    private fun showLoadingView(viewHolder: LoadingViewHolder, position: Int) {}

    private fun populateItemRows(viewHolder: ItemViewHolder, position: Int) {
        val item = itemList[position]
        viewHolder.tvItem.text = item
    }
}

चरण 6 - AndroidManifest.xml में कोड जोड़ें

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

ऐप चलाएं

अपने एंड्रॉइड डिवाइस को कंप्यूटर से कनेक्ट करें। एंड्रॉइड स्टूडियो में प्रोजेक्ट की एक्टिविटी फ़ाइल खोलें और टूलबार से Run आइकन पर क्लिक करें। अपना मोबाइल डिवाइस चुनें और डिवाइस पर डिफ़ॉल्ट स्क्रीन देखें।

  1. ConstraintLayout के साथ RecyclerView का उपयोग कैसे करें? ConstraintLayout के साथ RecyclerView का उपयोग कैसे करें?

    RecyclerView आइटम लेआउट के रूप में ConstraintLayout ConstraintLayout एक फ्लैट व्यू पदानुक्रम (नेस्टिंग के बिना) की अनुमति देता है, जो RecyclerView आइटम के लिए प्रदर्शन में सुधार करता है। यह गाइड एक कार्ड-शैली ग्रिड आइटम के लिए एक प्रतिक्रियाशील, बाधा-आधारित आइटम लेआउट दिखाता है। निर्भरताएं dependen

  1. Android में SearchView से RecyclerView कैसे फ़िल्टर करें? Android में SearchView से RecyclerView कैसे फ़िल्टर करें?

    Android में SearchView से RecyclerView फ़िल्टर करना यह ट्यूटोरियल दिखाता है कि कैसे RecyclerView में SearchView का उपयोग करके रियल-टाइम फ़िल्टरिंग इम्प्लीमेंट की जाती है, Filterable इंटरफेस और कस्टम एडाप्टर के साथ। चरण 1: प्रोजेक्ट और निर्भरताएं Android Studio में नया प्रोजेक्ट बनाएं। RecyclerView

  1. Android में RecyclerView से एंडलेस/इनफिनिट स्क्रॉलिंग लिस्ट कैसे बनाएं? Android में RecyclerView से एंडलेस/इनफिनिट स्क्रॉलिंग लिस्ट कैसे बनाएं?

    परिचय यह ट्यूटोरियल दिखाता है कि RecyclerView में एंडलेस स्क्रॉलिंग (पेजिनेशन) कैसे इम्प्लीमेंट करें। जब उपयोगकर्ता सूची के अंत तक पहुंचता है, तो अगला पेज ऑटोमैटिकली लोड होता है। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं और डिपेंडेंसी जोड़ें Android Studio में File → New Project से नया प्रोजेक्ट बनाएं