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

RecyclerView-এ LinearLayoutManager দিয়ে শীর্ষে স্ক্রোল করা

RecyclerView এবং LinearLayoutManager

RecyclerView হল ListView-এর উন্নত সংস্করণ যা ViewHolder ডিজাইন প্যাটার্ন ব্যবহার করে। এটি লিস্ট এবং গ্রিড উভয়ই দেখাতে পারে। LinearLayoutManager সহ RecyclerView-এ স্মুথ স্ক্রোলিং বাস্তবায়ন করা সহজ।

উদাহরণ: ছাত্র রেকর্ড অ্যাপে শীর্ষে স্ক্রোল

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

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

ধাপ ২: build.gradle-এ ডিপেন্ডেন্সি যোগ করুন

dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    // অন্যান্য ডিপেন্ডেন্সি...
}

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

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/top"
        app:backgroundTint="#FFFF00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:src="@android:drawable/arrow_up_float" />
</android.support.design.widget.CoordinatorLayout>

CoordinatorLayout ব্যবহার করা হয়েছে যাতে FloatingActionButton সঠিক কাজ করে। FAB-এ ক্লিক করলে RecyclerView শীর্ষে স্ক্রোল করবে।

ধাপ ৪: MainActivity.java

package com.example.andy.tutorialspoint;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private StudentAdapter studentAdapter;
    private List<StudentData> studentDataList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FloatingActionButton moveTop = findViewById(R.id.top);
        recyclerView = findViewById(R.id.recycler_view);
        studentAdapter = new StudentAdapter(studentDataList, this);
        
        LinearLayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(studentAdapter);
        
        prepareStudentData();

        // FAB ক্লিক করলে শীর্ষে স্ক্রোল
        moveTop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                recyclerView.smoothScrollToPosition(0);
            }
        });
    }

    private void prepareStudentData() {
        studentDataList.add(new StudentData("সাই", 25));
        studentDataList.add(new StudentData("সাই রাজ", 25));
        studentDataList.add(new StudentData("রঘু", 20));
        studentDataList.add(new StudentData("রাজ", 28));
        studentDataList.add(new StudentData("আমর", 15));
        studentDataList.add(new StudentData("বাপু", 19));
        studentDataList.add(new StudentData("চন্দ্র", 52));
        studentDataList.add(new StudentData("দেরাজ", 30));
        studentDataList.add(new StudentData("এশান্ত", 28));
        
        // নাম অনুযায়ী সর্ট করুন
        Collections.sort(studentDataList, new Comparator<StudentData>() {
            @Override
            public int compare(StudentData o1, StudentData o2) {
                return o1.name.compareTo(o2.name);
            }
        });
        studentAdapter.notifyDataSetChanged();
    }
}

ধাপ ৫: StudentAdapter.java

package com.example.andy.tutorialspoint;

import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
import java.util.Random;

class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.MyViewHolder> {
    List<StudentData> studentDataList;

    public StudentAdapter(List<StudentData> studentDataList) {
        this.studentDataList = studentDataList;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.student_list_row, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        StudentData data = studentDataList.get(position);
        Random rnd = new Random();
        int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        holder.parent.setBackgroundColor(color);
        holder.name.setText(data.name);
        holder.age.setText(String.valueOf(data.age));
    }

    @Override
    public int getItemCount() {
        return studentDataList.size();
    }

    static class MyViewHolder extends RecyclerView.ViewHolder {
        TextView name, age;
        LinearLayout parent;

        public MyViewHolder(View itemView) {
            super(itemView);
            parent = itemView.findViewById(R.id.parent);
            name = itemView.findViewById(R.id.name);
            age = itemView.findViewById(R.id.age);
        }
    }
}

ধাপ ৬: আইটেম লেআউট (res/layout/student_list_row.xml)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:card_view="https://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    card_view:cardCornerRadius="4dp"
    android:id="@+id/card_view"
    android:layout_margin="10dp"
    android:layout_height="200dp">
    <LinearLayout
        android:id="@+id/parent"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:textSize="25sp"
            android:textColor="#FFF"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/age"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:textSize="25sp"
            android:textColor="#FFF"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.v7.widget.CardView>

ধাপ ৭: ডেটা মডেল (StudentData.java)

package com.example.andy.tutorialspoint;

class StudentData {
    String name;
    int age;

    public StudentData(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

ফলাফল

অ্যাপ রান করলে ছাত্রদের লিস্ট দেখাবে। নিচে যাওয়ার পর হলুদ ফ্লোটিং বাটনে ক্লিক করলে স্মুথলি শীর্ষে স্ক্রোল করবে।

RecyclerView-এ LinearLayoutManager দিয়ে শীর্ষে স্ক্রোল করা

RecyclerView-এ LinearLayoutManager দিয়ে শীর্ষে স্ক্রোল করা

  1. অ্যান্ড্রয়েডে ডাটাবেস সহ RecyclerView কীভাবে ব্যবহার করবেন?

  2. Android-এ RecyclerView-এ অসীম লিস্ট (Endless Scrolling) বাস্তবায়ন

  3. CSS দিয়ে "স্ক্রোল ব্যাক টু টপ" বাটন তৈরি

  4. টাচপ্যাড দিয়ে স্ক্রোল করার পদ্ধতি