কম্পিউটার

অ্যান্ড্রয়েডে লিনিয়ারলেআউট ম্যানেজার সহ রিসাইক্লারভিউতে কীভাবে শীর্ষে স্ক্রোল করবেন?


উদাহরণে আসার আগে, আমাদের জানা উচিত অ্যান্ড্রয়েডে রিসাইক্লার ভিউ কী। রিসাইক্লার ভিউ হল লিস্ট ভিউ এর আরও উন্নত সংস্করণ এবং এটি ভিউ হোল্ডার ডিজাইন প্যাটার্নের উপর ভিত্তি করে কাজ করে। রিসাইক্লার ভিউ ব্যবহার করে আমরা গ্রিড এবং আইটেমের তালিকা দেখাতে পারি।

এই উদাহরণটি দেখায় যে কিভাবে RecyclerView-এ LinearLayoutManager-এর মাধ্যমে শীর্ষে স্ক্রোল করা যায় সে সম্পর্কে একটি সুন্দর ছাত্র রেকর্ড অ্যাপ তৈরি করে যা বয়সের সাথে ছাত্রের নাম প্রদর্শন করে।

ধাপ 1 − অ্যান্ড্রয়েড স্টুডিওতে একটি নতুন প্রকল্প তৈরি করুন, ফাইল ⇒ নতুন প্রকল্পে যান এবং একটি নতুন প্রকল্প তৈরি করতে সমস্ত প্রয়োজনীয় বিবরণ পূরণ করুন৷

ধাপ 2 − build.gradle খুলুন এবং রিসাইক্লার ভিউ এবং কার্ড ভিউ লাইব্রেরি নির্ভরতা যোগ করুন।

apply plugin: 'com.android.application'

android {
   compileSdkVersion 28
   defaultConfig {
      applicationId "com.example.andy.tutorialspoint"
      minSdkVersion 19
      targetSdkVersion 28
      versionCode 1
      versionName "1.0"
      testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
   }
   buildTypes {
      release {
         minifyEnabled false
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      }
   }
}
dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
   implementation 'com.android.support:appcompat-v7:28.0.0'
   implementation 'com.android.support:design:28.0.0'
   implementation 'com.android.support.constraint:constraint-layout:1.1.3'
   implementation 'com.android.support:cardview-v7:28.0.0'
   implementation 'com.android.support:recyclerview-v7:28.0.0'
   testImplementation 'junit:junit:4.12'
   androidTestImplementation 'com.android.support.test:runner:1.0.2'
   androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

ধাপ 3 − 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 = "horizontal" />
   <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 >

উপরের কোডে আমরা আপেক্ষিক প্যারেন্ট লেআউট হিসাবে উইন্ডো ম্যাঞ্জারে রিসাইক্লার ভিউ যোগ করেছি এবং FloatingActionButton যোগ করেছি। FloatingActionButton CoordinatorLayout সমর্থন করে। তাই আমরা প্যারেন্ট লেআউট CoordinatorLayout ব্যবহার করেছি। আপনি যখন FloatingActionButton এ ক্লিক করেন, তখন এটি স্ক্রোল করে শীর্ষ অবস্থানে চলে যাবে।

পদক্ষেপ 4৷ − src/MainActivity.java

-এ নিম্নলিখিত কোড যোগ করুন
package com.example.andy.tutorialspoint;

import android.annotation.TargetApi;
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.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

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 studentDataList = new ArrayList<>();
   @TargetApi(Build.VERSION_CODES.O)
   @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,MainActivity.this);
      RecyclerView.LayoutManager manager = new LinearLayoutManager(this);
      recyclerView.setLayoutManager(manager);
      recyclerView.setAdapter(studentAdapter);
      StudentDataPrepare();
      moveTop.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            recyclerView.smoothScrollToPosition(0);
         }
      });
   }
   @RequiresApi(api = Build.VERSION_CODES.N)
   private void StudentDataPrepare() {
      studentData data = new studentData("sai", 25);
      studentDataList.add(data);
      data = new studentData("sai raj", 25);
      studentDataList.add(data);
      data = new studentData("raghu", 20);
      studentDataList.add(data);
      data = new studentData("raj", 28);
      studentDataList.add(data);
      data = new studentData("amar", 15);
      studentDataList.add(data);
      data = new studentData("bapu", 19);
      studentDataList.add(data);
      data = new studentData("chandra", 52);
      studentDataList.add(data);
      data = new studentData("deraj", 30);
      studentDataList.add(data);
      data = new studentData("eshanth", 28);
      studentDataList.add(data);
      Collections.sort(studentDataList, new Comparator() {
         @Override
         public int compare(studentData o1, studentData o2) {
            return o1.name.compareTo(o2.name);
         }
      });
   }
}

উপরের কোডে আমরা রিসাইক্লার ভিউ এবং StudentAdapter যোগ করেছি। সেই স্টুডেন্ট অ্যাডাপ্টারে আমরা অ্যারেলিস্ট হিসাবে StudentDatalist পাস করেছি। স্টুডেন্ট ডেটা লিস্টে ছাত্রের নাম এবং বয়স থাকে।

আমরা 0 তম অবস্থানে স্ক্রোল করতে smoothScrollToPosition() ব্যবহার করেছি, আমরা আমাদের প্রয়োজন অনুসারে যে কোনও অবস্থান নির্ধারণ করতে পারি। এই উদাহরণে, এটি নীচে দেখানো হিসাবে শূন্য(শীর্ষ) অবস্থানে স্ক্রোল করতে যাচ্ছে -

moveTop.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
      recyclerView.smoothScrollToPosition(0);
   }
});

ধাপ 5 − সংশোধিত ফাইল src/ StudentAdapter.java এর বিষয়বস্তু নিম্নরূপ। প্যাকেজ com.example.andy.tutorialspoint;

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 {
   List studentDataList;
   public StudentAdapter(List studentDataList) {
      this.studentDataList = studentDataList;
   }
   @NonNull
   @Override
   public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
      View itemView = LayoutInflater.from(viewGroup.getContext())
      .inflate(R.layout.student_list_row, viewGroup, false);
      return new MyViewHolder(itemView);
   }
   @Override
   public void onBindViewHolder(MyViewHolder viewHolder, int i) {
      studentData data = studentDataList.get(i);
      Random rnd = new Random();
      int currentColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
      viewHolder.parent.setBackgroundColor(currentColor);
      viewHolder.name.setText(data.name);
      viewHolder.age.setText(String.valueOf(data.age));
   }
   @Override
   public int getItemCount() {
      return studentDataList.size();
   }
   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);
      }
   }
}

অ্যাডাপ্টার ক্লাসে আমাদের চারটি পদ্ধতি রয়েছে যা নীচে দেখানো হয়েছে -

  • onCreateViewHolder() :- এটি একটি ভিউ হোল্ডার তৈরি করতে ব্যবহৃত হয় এবং এটি একটি ভিউ প্রদান করে।

  • onBindViewHolder() - এটি তৈরি করা ভিউ হোল্ডারের সাথে আবদ্ধ হবে৷

  • getItemCount() - এতে তালিকার আকার রয়েছে৷

  • MyViewHolder ক্লাস - এটি ভিউ হোল্ডার অভ্যন্তরীণ শ্রেণী যা RecyclerView.ViewHolder

    দ্বারা প্রসারিত

রিসাইক্লার ভিউ আইটেমগুলির জন্য র্যান্ডম ব্যাকগ্রাউন্ড সেট করতে, আমরা র্যান্ডম ক্লাস ব্যবহার করে র্যান্ডম রঙ তৈরি করেছি (যা অ্যান্ড্রয়েডে পূর্বনির্ধারিত শ্রেণী) এবং নীচে দেখানো আইটেমের প্যারেন্ট অফ ভিউ আইটেমে রঙ যোগ করেছি -

Random rnd = new Random();
int currentColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
viewHolder.parent.setBackgroundColor(currentColor);

ধাপ 6 − নিচে xml 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>

উপরের তালিকা আইটেম ভিউতে আমরা কার্ডভিউ এর ভিতরে নাম এবং বয়সের জন্য দুটি পাঠ্য ভিউ তৈরি করেছি। কার্ড ভিউতে পূর্বনির্ধারিত কোণার ব্যাসার্ধ এবং ছায়া বৈশিষ্ট্য রয়েছে। তাই আমরা কার্ড ভিউ সহ কোণার ব্যাসার্ধ ব্যবহার করেছি।

পদক্ষেপ 7 − src/ studentData.java সংশোধিত ফাইলের বিষয়বস্তু নিম্নরূপ। প্যাকেজ com.example.andy.tutorialspoint;

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

উপরের কোডে স্টুডেন্ট ডাটা অবজেক্ট সম্পর্কে জানানো হয়েছে। আপনার অ্যাপ্লিকেশন চালানোর চেষ্টা করা যাক. আমি ধরে নিচ্ছি আপনি আপনার কম্পিউটারের সাথে আপনার আসল অ্যান্ড্রয়েড মোবাইল ডিভাইসটি সংযুক্ত করেছেন৷ অ্যান্ড্রয়েড স্টুডিও থেকে অ্যাপটি চালাতে, আপনার প্রোজেক্টের অ্যাক্টিভিটি ফাইলগুলির একটি খুলুন এবং টুলবার থেকে রান আইকনে ক্লিক করুন। একটি বিকল্প হিসাবে আপনার মোবাইল ডিভাইস নির্বাচন করুন এবং তারপরে আপনার মোবাইল ডিভাইসটি পরীক্ষা করুন যা আপনার ডিফল্ট স্ক্রীন প্রদর্শন করবে -

অ্যান্ড্রয়েডে লিনিয়ারলেআউট ম্যানেজার সহ রিসাইক্লারভিউতে কীভাবে শীর্ষে স্ক্রোল করবেন?

এখন ঘড়ির হলুদ বোতামটি রিসাইক্লারভিউয়ের শীর্ষে স্ক্রোল করুন, এটি নীচে দেখানো ফলাফলটি দেখাবে -

অ্যান্ড্রয়েডে লিনিয়ারলেআউট ম্যানেজার সহ রিসাইক্লারভিউতে কীভাবে শীর্ষে স্ক্রোল করবেন?


  1. অ্যান্ড্রয়েডে রিসাইক্লারভিউ সহ অন্তহীন তালিকা কীভাবে বাস্তবায়ন করবেন?

  2. অ্যান্ড্রয়েডে টেক্সটভিউতে পাঠ্যকে কীভাবে জাস্টিফাই করবেন?

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

  4. কিভাবে একটি টাচপ্যাড দিয়ে স্ক্রোল করবেন