পৃষ্ঠাযুক্ত তালিকা প্রদর্শন করুন

এই নির্দেশিকাটি পেজিং লাইব্রেরি ওভারভিউ এর উপর তৈরি করে, আপনি কীভাবে আপনার অ্যাপের UI-তে ব্যবহারকারীদের কাছে তথ্যের তালিকা উপস্থাপন করতে পারেন তা বর্ণনা করে, বিশেষ করে যখন এই তথ্য পরিবর্তন হয়।

আপনার ভিউ মডেলের সাথে আপনার UI সংযুক্ত করুন

আপনি LiveData<PagedList> -এর একটি উদাহরণ একটি PagedListAdapter এর সাথে সংযুক্ত করতে পারেন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

কোটলিন

class ConcertActivity : AppCompatActivity() {
    private val adapter = ConcertAdapter()

    // Use the 'by viewModels()' Kotlin property delegate
    // from the activity-ktx artifact
    private val viewModel: ConcertViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);
        viewModel.concerts.observe(this, Observer { adapter.submitList(it) })
    }
}

জাভা

public class ConcertActivity extends AppCompatActivity {
    private ConcertAdapter adapter = new ConcertAdapter();
    private ConcertViewModel viewModel;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewModel = new ViewModelProvider(this).get(ConcertViewModel.class);
        viewModel.concertList.observe(this, adapter::submitList);
    }
}

যেহেতু ডেটা উত্সগুলি PagedList এর নতুন উদাহরণ প্রদান করে, কার্যকলাপটি এই বস্তুগুলিকে অ্যাডাপ্টারে পাঠায়। PagedListAdapter বাস্তবায়ন সংজ্ঞায়িত করে কিভাবে আপডেটগুলি গণনা করা হয় এবং এটি স্বয়ংক্রিয়ভাবে পেজিং এবং তালিকার পার্থক্য পরিচালনা করে। অতএব, আপনার ViewHolder শুধুমাত্র একটি নির্দিষ্ট প্রদত্ত আইটেমের সাথে আবদ্ধ হতে হবে:

কোটলিন

class ConcertAdapter() :
        PagedListAdapter<Concert, ConcertViewHolder>(DIFF_CALLBACK) {
    override fun onBindViewHolder(holder: ConcertViewHolder, position: Int) {
        val concert: Concert? = getItem(position)

        // Note that "concert" is a placeholder if it's null.
        holder.bindTo(concert)
    }

    companion object {
        private val DIFF_CALLBACK = ... // See Implement the diffing callback section.
    }
}

জাভা

public class ConcertAdapter
        extends PagedListAdapter<Concert, ConcertViewHolder> {
    protected ConcertAdapter() {
        super(DIFF_CALLBACK);
    }

    @Override
    public void onBindViewHolder(@NonNull ConcertViewHolder holder,
            int position) {
        Concert concert = getItem(position);

        // Note that "concert" can be null if it's a placeholder.
        holder.bindTo(concert);
    }

    private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK
            = ... // See Implement the diffing callback section.
}

PagedListAdapter একটি PagedList.Callback অবজেক্ট ব্যবহার করে পৃষ্ঠা লোড ইভেন্ট পরিচালনা করে। ব্যবহারকারী স্ক্রোল করার সাথে সাথে, PagedListAdapter PagedList.loadAround() কে কল করে অন্তর্নিহিত PagedList কোন আইটেমটি DataSource থেকে আনতে হবে তা নির্দেশ করতে।

ভিন্ন কলব্যাক বাস্তবায়ন করুন

নিম্নলিখিত নমুনা areContentsTheSame() এর একটি ম্যানুয়াল বাস্তবায়ন দেখায়, যা প্রাসঙ্গিক অবজেক্ট ক্ষেত্রগুলির তুলনা করে:

কোটলিন

private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Concert>() {
    // The ID property identifies when items are the same.
    override fun areItemsTheSame(oldItem: Concert, newItem: Concert) =
            oldItem.id == newItem.id

    // If you use the "==" operator, make sure that the object implements
    // .equals(). Alternatively, write custom data comparison logic here.
    override fun areContentsTheSame(
            oldItem: Concert, newItem: Concert) = oldItem == newItem
}

জাভা

private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK =
        new DiffUtil.ItemCallback<Concert>() {

    @Override
    public boolean areItemsTheSame(Concert oldItem, Concert newItem) {
        // The ID property identifies when items are the same.
        return oldItem.getId() == newItem.getId();
    }

    @Override
    public boolean areContentsTheSame(Concert oldItem, Concert newItem) {
        // Don't use the "==" operator here. Either implement and use .equals(),
        // or write custom data comparison logic here.
        return oldItem.equals(newItem);
    }
};

যেহেতু আপনার অ্যাডাপ্টারে আইটেমগুলির তুলনা করার আপনার সংজ্ঞা অন্তর্ভুক্ত রয়েছে, একটি নতুন PagedList অবজেক্ট লোড হলে অ্যাডাপ্টার স্বয়ংক্রিয়ভাবে এই আইটেমগুলির পরিবর্তনগুলি সনাক্ত করে৷ ফলস্বরূপ, অ্যাডাপ্টার আপনার RecyclerView অবজেক্টের মধ্যে দক্ষ আইটেম অ্যানিমেশন ট্রিগার করে।

একটি ভিন্ন অ্যাডাপ্টারের ধরন ব্যবহার করে ভিন্নতা

আপনি যদি PagedListAdapter থেকে উত্তরাধিকারী না হওয়া বেছে নেন—যেমন আপনি যখন একটি লাইব্রেরি ব্যবহার করছেন যা তার নিজস্ব অ্যাডাপ্টার প্রদান করে—আপনি এখনও একটি AsyncPagedListDiffer অবজেক্টের সাথে সরাসরি কাজ করার মাধ্যমে পেজিং লাইব্রেরি অ্যাডাপ্টারের ভিন্ন কার্যকারিতা ব্যবহার করতে পারেন।

আপনার UI এ স্থানধারক প্রদান করুন

আপনার অ্যাপের ডেটা আনা শেষ হওয়ার আগে আপনি যেখানে আপনার UI একটি তালিকা প্রদর্শন করতে চান, আপনি আপনার ব্যবহারকারীদের স্থানধারক তালিকা আইটেমগুলি দেখাতে পারেন। PagedList ডেটা লোড না হওয়া পর্যন্ত তালিকা আইটেম ডেটা null হিসাবে উপস্থাপন করে এই ক্ষেত্রে পরিচালনা করে।

প্লেসহোল্ডারদের নিম্নলিখিত সুবিধা রয়েছে:

  • স্ক্রলবারগুলির জন্য সমর্থন: PagedList PagedListAdapter কে তালিকা আইটেমের সংখ্যা প্রদান করে। এই তথ্য অ্যাডাপ্টারটিকে একটি স্ক্রলবার আঁকতে দেয় যা তালিকার সম্পূর্ণ আকার বোঝায়। নতুন পৃষ্ঠাগুলি লোড হওয়ার সাথে সাথে, স্ক্রলবারটি লাফ দেয় না কারণ আপনার তালিকার আকার পরিবর্তন হয় না।
  • কোন লোডিং স্পিনার প্রয়োজন নেই: যেহেতু তালিকার আকার ইতিমধ্যেই পরিচিত, ব্যবহারকারীদের সতর্ক করার কোন প্রয়োজন নেই যে আরও আইটেম লোড হচ্ছে। স্থানধারীরা নিজেরাই সেই তথ্য জানান।

স্থানধারকদের জন্য সমর্থন যোগ করার আগে, যদিও, নিম্নলিখিত পূর্বশর্তগুলি মনে রাখবেন:

  • একটি গণনাযোগ্য ডেটা সেটের প্রয়োজন: রুম পারসিসটেন্স লাইব্রেরি থেকে DataSource উদাহরণগুলি দক্ষতার সাথে তাদের আইটেমগুলি গণনা করতে পারে। আপনি যদি একটি কাস্টম স্থানীয় স্টোরেজ সমাধান বা শুধুমাত্র নেটওয়ার্ক ডেটা আর্কিটেকচার ব্যবহার করেন তবে, আপনার ডেটা সেটের কতগুলি আইটেম রয়েছে তা নির্ধারণ করা ব্যয়বহুল বা এমনকি অসম্ভবও হতে পারে৷
  • আনলোড করা আইটেমগুলির জন্য অ্যাকাউন্টের জন্য অ্যাডাপ্টারের প্রয়োজন: মুদ্রাস্ফীতির জন্য তালিকা প্রস্তুত করতে আপনি যে অ্যাডাপ্টার বা উপস্থাপনা পদ্ধতি ব্যবহার করেন তা নাল তালিকা আইটেমগুলি পরিচালনা করতে হবে। উদাহরণস্বরূপ, একটি ViewHolder ডেটা বাঁধাই করার সময়, আনলোড করা ডেটা উপস্থাপন করতে আপনাকে ডিফল্ট মান প্রদান করতে হবে।
  • একই আকারের আইটেম ভিউ প্রয়োজন: যদি তালিকা আইটেম আকারগুলি তাদের বিষয়বস্তুর উপর ভিত্তি করে পরিবর্তন করতে পারে, যেমন সামাজিক নেটওয়ার্কিং আপডেট, আইটেমগুলির মধ্যে ক্রসফেডিং ভাল দেখায় না। আমরা দৃঢ়ভাবে এই ক্ষেত্রে স্থানধারক নিষ্ক্রিয় করার পরামর্শ দিই।

মতামত প্রদান

এই সম্পদগুলির মাধ্যমে আমাদের সাথে আপনার প্রতিক্রিয়া এবং ধারণা শেয়ার করুন:

ইস্যু ট্র্যাকার
সমস্যাগুলি রিপোর্ট করুন যাতে আমরা বাগগুলি ঠিক করতে পারি৷

অতিরিক্ত সম্পদ

পেজিং লাইব্রেরি সম্পর্কে আরও জানতে, নিম্নলিখিত সংস্থানগুলি দেখুন৷

নমুনা

কোডল্যাব

ভিডিও

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}