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

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

ListView স্ক্রল ডিরেকশন ডিটেকশন: OnScrollListener ব্যবহার

এই উদাহরণটি দেখাবে কীভাবে AbsListView.OnScrollListener ব্যবহার করে ListView-এ উপরের ও নিচের দিকে স্ক্রল হচ্ছে কিনা তা বের করা যায়।

পদক্ষেপ ১: প্রজেক্ট তৈরি করুন

Android Studio-তে নতুন প্রজেক্ট শুরু করুন।

পদক্ষেপ ২: লেআউট XML (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:orientation="vertical"
    android:gravity="center"
    android:padding="8dp"
    tools:context=".MainActivity">

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

</LinearLayout>

পদক্ষেপ ৩: MainActivity.java

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

public class MainActivity extends AppCompatActivity {
    ListView listView;
    String[] numbers = {"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
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayAdapter adapter = new ArrayAdapter<>(this, 
            android.R.layout.simple_list_item_1, numbers);
        
        listView = findViewById(R.id.listView);
        listView.setAdapter(adapter);

        listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            private int lastFirstVisibleItem = 0;

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // SCROLL_STATE_IDLE, SCROLL_STATE_TOUCH_SCROLL, SCROLL_STATE_FLING
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, 
                               int visibleItemCount, int totalItemCount) {
                
                if (lastFirstVisibleItem < firstVisibleItem) {
                    // নিচের দিকে স্ক্রল হচ্ছে
                    Toast.makeText(getApplicationContext(), "Scrolling down", Toast.LENGTH_SHORT).show();
                } else if (lastFirstVisibleItem > firstVisibleItem) {
                    // উপরের দিকে স্ক্রল হচ্ছে
                    Toast.makeText(getApplicationContext(), "Scrolling up", Toast.LENGTH_SHORT).show();
                }
                
                lastFirstVisibleItem = firstVisibleItem;
            }
        });
    }
}

মূল উদাহরণের সমস্যা ও সমাধান

মূল কোডে `findViewById(R.id.scrollView)` কল করা হয়েছে কিন্তু লেআউটে ScrollView নেই। এটি ক্ল্যাশ করবে। উপরের সংশোধিত কোডে এটি ঠিক করা হয়েছে।

আধুনিক পদ্ধতি: RecyclerView ব্যবহার

ListView ডিপ্রিকেটেড নয় কিন্তু RecyclerView পছন্দযোগ্য। RecyclerView-এ:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        if (dy > 0) {
            // Scrolling down
        } else if (dy < 0) {
            // Scrolling up
        }
    }
});

ব্যবহারের উদাহরণ

  • স্ক্রল ডাউন হলে টুলবার লুকান
  • নিচে পৌঁছলে আরও ডেটা লোড করুন (Infinite scrolling)
  • ফ্লোটিং অ্যাকশন বাটন দেখান/লুকান
  1. Android-এ ScrollView-এর শেষে পৌঁছানোর ইভেন্ট ধরার পদ্ধতি

  2. অ্যান্ড্রয়েড ListView-এর রঙ এবং ফন্ট কীভাবে পরিবর্তন করবেন?

  3. অ্যান্ড্রয়েডে Google Maps-এ টাচ ও অবস্থান ডিটেক্ট করা

  4. Android-এ স্বাইপ দিক (বাম/ডান, উপরে/নিচে) সনাক্ত করার পদ্ধতি