কম্পিউটার

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


এই উদাহরণটি দেখায় কিভাবে আমি অ্যান্ড্রয়েডে রিসাইক্লারভিউ-এর সাথে একটি অন্তহীন তালিকা বাস্তবায়ন করব।

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

বিল্ড গ্রেডে (মডিউল অ্যাপ) -

নিম্নলিখিত নির্ভরতা যোগ করুন
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'

ধাপ 2 − 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:orientation="vertical"
   tools:context=".MainActivity">
   <androidx.recyclerview.widget.RecyclerView
      android:id="@+id/recyclerView"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />
</LinearLayout>

ধাপ 3 − src/MainActivity.java

-এ নিম্নলিখিত কোড যোগ করুন
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.os.Handler;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
   RecyclerView recyclerView;
   RecyclerViewAdapter recyclerViewAdapter;
   ArrayList<String>rowsArrayList = new ArrayList<>();
   boolean isLoading = false;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      recyclerView = findViewById(R.id.recyclerView);
      populateData();
      initAdapter();
      initScrollListener();
   }
   private void populateData() {
      for (int i = 0; i < 10; i++) {
         rowsArrayList.add("Number " + i);
      }
   }
   private void initAdapter() {
      recyclerViewAdapter = new RecyclerViewAdapter(rowsArrayList);
      recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
      recyclerView.setAdapter(recyclerViewAdapter);
   }
   private void initScrollListener() {
      recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
         @Override
         public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
         }
         @Override
         public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
            if (!isLoading) {
               if (linearLayoutManager != null && linearLayoutManager.findLastCompletelyVisibleItemPosition() == rowsArrayList.size() - 1) {
                  //bottom of list!
                  loadMore();
                  isLoading = true;
               }
            }
         }
      });
   }
   private void loadMore() {
      rowsArrayList.add(null);
      recyclerViewAdapter.notifyItemInserted(rowsArrayList.size() - 1);
      Handler handler = new Handler();
      handler.postDelayed(new Runnable() {
         @Override
         public void run() {
            rowsArrayList.remove(rowsArrayList.size() - 1);
            int scrollPosition = rowsArrayList.size();
            recyclerViewAdapter.notifyItemRemoved(scrollPosition);
            int currentSize = scrollPosition;
            int nextLimit = currentSize + 10;
            while (currentSize - 1 < nextLimit) {
               rowsArrayList.add("Number " + currentSize);
               currentSize++;
            }
            recyclerViewAdapter.notifyDataSetChanged();
            isLoading = false;
         }
      }, 2000);
   }
}

পদক্ষেপ 4৷ - একটি নতুন জাভা ক্লাস তৈরি করুন (RecyclerViewAdapter.java) এবং নিম্নলিখিত কোড যোগ করুন -

package app.com.sample;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class RecyclerViewAdapter extends
RecyclerView.Adapter<RecyclerView.ViewHolder> {
   private final int VIEW_TYPE_ITEM = 0;
   private List<String> mItemList;
   RecyclerViewAdapter(List<String> itemList) {
      mItemList = itemList;
   }
   @NonNull
   @Override
   public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
      if (viewType == VIEW_TYPE_ITEM) {
         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row, parent, false);
         return new ItemViewHolder(view);
      } else {
         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_loading, parent, false);
         return new LoadingViewHolder(view);
      }
   }
   @Override
   public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
      if (viewHolder instanceof ItemViewHolder) {
         populateItemRows((ItemViewHolder) viewHolder, position);
      }
       else if (viewHolder instanceof LoadingViewHolder) {
         showLoadingView((LoadingViewHolder) viewHolder, position);
      }
   }
   @Override
   public int getItemCount() {
      return mItemList == null ? 0 : mItemList.size();
   }
   @Override
   public int getItemViewType(int position) {
      int VIEW_TYPE_LOADING = 1;
      return mItemList.get(position) == null ? VIEW_TYPE_LOADING :
      VIEW_TYPE_ITEM;
   }
   private class ItemViewHolder extends RecyclerView.ViewHolder {
      TextView tvItem;
      ItemViewHolder(@NonNull View itemView) {
         super(itemView);
         tvItem = itemView.findViewById(R.id.textViewItem);
      }
   }
   private class LoadingViewHolder extends RecyclerView.ViewHolder {
      ProgressBar progressBar;
      LoadingViewHolder(@NonNull View itemView) {
         super(itemView);
         progressBar = itemView.findViewById(R.id.progressBar);
      }
   }
   private void showLoadingView(LoadingViewHolder viewHolder, int position) {
   }
   private void populateItemRows(ItemViewHolder viewHolder, int position) {
      String item = mItemList.get(position);
      viewHolder.tvItem.setText(item);
   }
}

ধাপ 5 − একটি নতুন লেআউট রিসোর্স ফাইল (item_row.xml) তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন −

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:app="https://schemas.android.com/apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:cardElevation="2dp"
   app:cardUseCompatPadding="true">
   <TextView
      android:id="@+id/textViewItem"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="16dp" />
</androidx.cardview.widget.CardView>

ধাপ 6 − একটি নতুন লেআউট রিসোর্স ফাইল (item_loading.xml) তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন −

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical">
   <ProgressBar
      android:id="@+id/progressBar"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center_horizontal"
      android:indeterminate="true"
      android:paddingLeft="8dp"
      android:paddingRight="8dp" />
</LinearLayout>

পদক্ষেপ 7 − androidManifest.xml

-এ নিম্নলিখিত কোড যোগ করুন
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
   <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. BroadcastReceiver দিয়ে কিভাবে Android Notification তৈরি করবেন?

  2. অ্যান্ড্রয়েডে সার্চভিউ কীভাবে ব্যবহার করবেন?

  3. অ্যান্ড্রয়েডে সার্চভিউ দিয়ে কীভাবে রিসাইক্লারভিউ ফিল্টার করবেন?

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