एंड्रॉइड में कोटलिन का उपयोग करके 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 आइकन पर क्लिक करें। अपना मोबाइल डिवाइस चुनें और डिवाइस पर डिफ़ॉल्ट स्क्रीन देखें।