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)
- ফ্লোটিং অ্যাকশন বাটন দেখান/লুকান