কম্পিউটার টিউটোরিয়াল

কোটলিন ব্যবহার করে অ্যান্ড্রয়েড ListView-এ স্ক্রল আপ ও ডাউন ডিটেক্ট করা

ওভারভিউ

এই টিউটোরিয়ালটি দেখায় কিভাবে AbsListView.OnScrollListener ব্যবহার করে ListView-এ উপরে (Scroll Up) এবং নিচে (Scroll Down) স্ক্রলিং ডিটেক্ট করা যায়। এটি ইনফিনিট স্ক্রলিং, টুলবার হাইড/শো ইত্যাদি ফিচারের জন্য কাজে লাগে।

পূর্বশর্ত

  • অ্যান্ড্রয়েড স্টুডিও (কোটলিন)
  • ListView ও Adapter বেসিক জ্ঞান

ধাপ ১: প্রজেক্ট তৈরি করুন

File → New Project → Empty Activity → Language: Kotlin।

ধাপ ২: লেআউট (res/layout/activity_main.xml)

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

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

ধাপ ৩: MainActivity.kt

package com.example.listviewscroll

import android.os.Bundle
import android.widget.AbsListView
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    private lateinit var listView: ListView
    private val numbers = arrayOf(
        "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
        "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
        "21", "22", "23", "24", "25"
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        listView = findViewById(R.id.listView)
        
        val adapter = ArrayAdapter(
            this,
            android.R.layout.simple_list_item_1,
            numbers
        )
        listView.adapter = adapter

        // স্ক্রল লিসেনার সেট করুন
        listView.setOnScrollListener(object : AbsListView.OnScrollListener {
            private var lastFirstVisibleItem = 0

            override fun onScrollStateChanged(view: AbsListView, scrollState: Int) {
                // SCROLL_STATE_IDLE, TOUCH_SCROLL, FLING
            }

            override fun onScroll(
                view: AbsListView,
                firstVisibleItem: Int,
                visibleItemCount: Int,
                totalItemCount: Int
            ) {
                if (lastFirstVisibleItem < firstVisibleItem) {
                    // নিচে স্ক্রল (Scroll Down)
                    Toast.makeText(
                        applicationContext,
                        "Scrolling down the ListView",
                        Toast.LENGTH_SHORT
                    ).show()
                } else if (lastFirstVisibleItem > firstVisibleItem) {
                    // উপরে স্ক্রল (Scroll Up)
                    Toast.makeText(
                        applicationContext,
                        "Scrolling up the ListView",
                        Toast.LENGTH_SHORT
                    ).show()
                }
                lastFirstVisibleItem = firstVisibleItem
            }
        })
    }
}

ধাপ ৪: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.listviewscroll">

    <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>

চলান ও ফলাফল

  1. অ্যাপ চালান → লিস্টভিউ দেখাবে।
  2. নিচে স্ক্রল করলে "Scrolling down..." টোস্ট।
  3. উপরে স্ক্রল করলে "Scrolling up..." টোস্ট।

গুরুত্বপূর্ণ নোট: ListView vs RecyclerView

ListView ডিপ্রিকেটেড নয় কিন্তু RecyclerView পছন্দনীয়। RecyclerView-এ স্ক্রল লিসেনার আলাদা:

// RecyclerView জন্য
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        if (dy > 0) {
            // Scroll Down
        } else if (dy < 0) {
            // Scroll Up
        }
    }
})

ইনফিনিট স্ক্রলিং (Pagination) উদাহরণ

override fun onScroll(...) {
    val lastItem = firstVisibleItem + visibleItemCount
    if (lastItem >= totalItemCount - 5 && !isLoading) { // ৫ আইটেম বাকি থাকলে
        loadMoreData() // API কল করে ডেটা লোড
    }
}

টুলবার হাইড/শো (Material Design)

override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
    if (dy > 0 && toolbar.visibility == View.VISIBLE) {
        toolbar.animate().translationY(-toolbar.height.toFloat()).setDuration(200).start()
    } else if (dy < 0 && toolbar.visibility == View.GONE) {
        toolbar.animate().translationY(0f).setDuration(200).start()
    }
}

সতর্কতা

  • প্রতিটি স্ক্রল ইভেন্টে টোস্ট দেখানো UX-এ খারাপ (বারবার টোস্ট আসবে)। বাস্তবে লজিক/ইউআই আপডেট করুন।
  • ListView-এর বদলে RecyclerView ব্যবহার করুন (ViewHolder প্যাটার্ন, পারফরম্যান্স ভালো)।
  1. Kotlin-এ Android-এ свайপ ডিরেকশন (বাম/ডান, উপর/নিচ) সনাক্ত করার পদ্ধতি

  2. Kotlin-এ Android ListView-এ ক্লিক ইভেন্ট হ্যান্ডল করার পদ্ধতি

  3. Kotlin-এ Android কাস্টম ListView-এ সার্চ ফাংশনালিটি ব্যবহার করার পদ্ধতি

  4. Kotlin ব্যবহার করে Android ListView-এ লং ক্লিক লিসেনার বাস্তবায়ন