পেজিং

পেজিং লাইব্রেরি আপনার অ্যাপের RecyclerView-এর মধ্যে ধীরে ধীরে এবং সুন্দরভাবে ডেটা লোড করা আপনার জন্য সহজ করে তোলে।

এই টেবিলে androidx.paging গ্রুপের সব আর্টিফ্যাক্টের তালিকা আছে।

আর্টিফ্যাক্ট স্টেবল রিলিজ রিলিজ ক্যান্ডিডেট বিটা রিলিজ আলফা রিলিজ
পেজিং-* ৩.৫.৩ - - -
paging-compose ৩.৫.৩ - - -
এই লাইব্রেরি শেষবার আপডেট করা হয়েছে: ১২ অক্টোবর, ২০২৬

ডিপেন্ডেন্সি ঘোষণা করা

Paging-এর উপর নির্ভরতা যোগ করতে, আপনাকে অবশ্যই নিজের প্রোজেক্টে Google Maven রিপোজিটরি যোগ করতে হবে। আরও তথ্যের জন্য Google-এর Maven রিপোজিটরি পড়ুন।

আপনার অ্যাপ বা মডিউলের জন্য build.gradle ফাইলে আপনার প্রয়োজনীয় আর্টিফ্যাক্টের জন্য ডিপেন্ডেন্সি যোগ করুন:

গ্ৰুভি

dependencies {
  def paging_version = "3.5.3"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.5.3"
}

Kotlin

dependencies {
  val paging_version = "3.5.3"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.5.3")
}

Kotlin এক্সটেনশন ব্যবহার করার বিষয়ে তথ্যের জন্য, ktx ডকুমেন্টেশন দেখুন।

ডিপেন্ডেন্সি সম্পর্কে আরও তথ্যের জন্য, বিল্ড ডিপেন্ডেন্সি যোগ করুন দেখুন।

মতামত

আপনার মতামত Jetpack-কে আরও ভালো করে তুলতে সাহায্য করে। আপনি যদি নতুন কোনও সমস্যা খুঁজে পান বা এই লাইব্রেরি উন্নত করার জন্য কোনও আইডিয়া থাকে, তাহলে আমাদের জানান। নতুন সমস্যা তৈরি করার আগে এই লাইব্রেরিতে আগে থেকে থাকা সমস্যা দেখে নিন। আপনি তারকাচিহ্ন বোতামে ক্লিক করে আগে থেকে থাকা কোনও সমস্যাতে আপনার ভোট যোগ করতে পারবেন।

নতুন সমস্যা তৈরি করুন

আরও তথ্যের জন্য ইস্যু ট্র্যাকার ডকুমেন্টেশন দেখুন।

ভার্সন 3.5

ভার্সন ৩.৫.৩

১২ অক্টোবর, ২০২৬

androidx.paging:paging-*:3.5.3 রিলিজ করা হয়েছে। ভার্সন 3.5.3-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • RemoteMediator কোনও দিকে পেজিনেশনের শেষে পৌঁছে গেলে এবং হেডার বা ফুটার টার্মিনাল সেপারেটরে কনভার্ট হয়ে গেলে, ItemSnapshotListFlow আর IllegalArgumentException থ্রো করবে না। (I821c7, b/566336825)
  • লোড করা পৃষ্ঠা PagingConfig.maxSize-এর বেশি হলে, ভিউপোর্ট যাতে ডেটা দিয়ে সঠিকভাবে পপুলেট করা থাকে তা নিশ্চিত করতে, লোড করা পৃষ্ঠা দুটির কম হবে না। (I037a0, b/565835910)

এক্সটার্নাল কন্ট্রিবিউশন

ইগর, b/565835910 বাগ ফিক্স জমা দেওয়ার জন্য ধন্যবাদ

ভার্সন 3.5.2

০৭ অক্টোবর, ২০২৬

androidx.paging:paging-*:3.5.2 রিলিজ করা হয়েছে। ভার্সন ৩.৫.২-এ এইসব কমিট আছে।

সমস্যার সমাধান

  • প্রাথমিক রিফ্রেশ সম্পূর্ণ হওয়ার আগে করা Pager.append() কল আর NoSuchElementException দেখাবে না। অ্যাপেণ্ড কলটি নো-অপ হবে। (Ide387, b/556780796)

ভার্সন 3.5.1

১২ আগস্ট, ২০২৬

androidx.paging:paging-*:3.5.1 রিলিজ করা হয়েছে। ভার্সন 3.5.1-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • প্লেসহোল্ডারে স্ক্রল করার সময় সেপারেটর সহ পৃষ্ঠা রিফ্রেশ করলে PagingSource.getRefreshKey ভুল anchorPosition প্রদান করা সংক্রান্ত সমস্যা সমাধান করা হয়েছে, যা অনেক বড়। (I475f0, b/516565503)

ভার্সন 3.5.0

৬ মে, ২০২৬

androidx.paging:paging-*:3.5.0 রিলিজ করা হয়েছে। 3.5.0 ভার্সনে এইসব কমিট আছে।

3.4.0 ভার্সনের পর থেকে গুরুত্বপূর্ণ পরিবর্তন:

  • Flow<PagingData>-কে Flow<ItemSnapshotList>-এ পরিবর্তন করতে Flow<PagingData>.asItemSnapshotListFlow অপারেটর যোগ করা হয়েছে। এর অর্থ হল, লোড করা ডেটা এখন UI লেয়ারের বাইরে অ্যাক্সেস করা যাবে, যার ফলে আপনি Flow<ItemSnapshotList>-কে অন্যান্য ডেটা সোর্সের সাথে একত্রিত করতে পারবেন, লোকালভাবে পেজ করা ডেটা ক্যাশে ও পরিবর্তন করতে পারবেন অথবা UI স্টেট এবং আরও অনেক কিছুর অংশ হিসেবে পেজ করা ডেটা প্রকাশ করতে পারবেন।

  • স্ক্রল না করেই ম্যানুয়ালি আরও ডেটা লোড করার জন্য এক্সটেনশন ফাংশন Pager.append ও Pager.prepend যোগ করা হয়েছে।

  • asItemSnapshotListFlow API ব্যবহার করার সময় লোড সংক্রান্ত সমস্যা থেকে রিকভার করতে এক্সটেনশন ফাংশন Pager.refresh এবং Paging.retry যোগ করা হয়েছে।

ভার্সন 3.5.0-rc01

২২ এপ্রিল, ২০২৬

androidx.paging:paging-*:3.5.0-rc01 রিলিজ করা হয়েছে। ভার্সন 3.5.0-rc01-এ এইসব কমিট রয়েছে।

কোনও পরিবর্তন করা হয়নি

  • 3.5.0-beta01 ভার্সনের পরে উল্লেখযোগ্য কোনও পরিবর্তন করা হয়নি।

ভার্সন 3.5.0-beta01

৮ এপ্রিল, ২০২৬

androidx.paging:paging-*:3.5.0-beta01 রিলিজ করা হয়েছে। 3.5.0-beta01 ভার্সনে এইসব কমিট আছে।

API-তে পরিবর্তন

  • Flow<PagingData>.asState API-এর নাম পরিবর্তন করে Flow<PagingData>.asItemSnapshotListFlow (I0dc11, b/496548025) করা হয়েছে

ভার্সন 3.5.0-alpha01

১১ মার্চ, ২০২৬

androidx.paging:paging-*:3.5.0-alpha01 রিলিজ করা হয়েছে। 3.5.0-alpha01 ভার্সনে এইসব কমিট রয়েছে।

নতুন ফিচার

  • paging-common আর্টিফ্যাক্টে এখন Flow<PagingData>-এ একটি নতুন asState ফ্লো অপারেটর আছে যা এটিকে Flow<ItemSnapshotList>-এ কনভার্ট করে। এর ফলে এইসব সুবিধা আনলক করা যায়:

    • অন্যান্য ডেটা সোর্সের সাথে ItemSnapshotList-এর ফ্লো একত্রিত করুন
    • cachedIn ছাড়াই একাধিক কালেক্টরের সাথে ফ্লো শেয়ার করুন
    • স্থানীয়ভাবে পেজ করা ডেটা ক্যাশে করুন
    • মেমরিতে পেজ করা ডেটা পরিবর্তন করা
    • UI স্টেটের অংশ হিসেবে পেজ করা ডেটা এক্সপোজ করা
    // In your ViewModel
    val pager = Pager(pagingConfig, pagingSourceFactory)
    val pagerFlow = pager.flow.asState()
    
    // alterantively convert the flow to a SharedFlow
    val pagerFlow = pager.flow.asState().stateIn()
    
    // In presenter layer
    val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList)
    val snapshot = itemsFlow.value
    
    LazyColumn {
    items(items = snapshot.items) { ... }
    }
    
  • এছাড়াও, paging-common আর্টিফ্যাক্ট Pager.append এবং Pager.prepend API যোগ করেছে যাতে লোড করা আইটেমের যেকোনও প্রান্তে ম্যানুয়ালি লোড ট্রিগার করা যায়।

    • paging-runtime বা paging-compose-এর সাথে ব্যবহার করা হলে, স্ক্রল করা ছাড়াও আরও ডেটা লোড করার বিকল্প প্রদান করে
    • নতুন asState API-এর সাথে ব্যবহার করা হলে, এটিই আরও ডেটা লোড করার একমাত্র উপায়
    LazyColumn {
    item {
           /**
           * Load more items when users scroll near the top of loaded items.
           */
           LaunchedEffect(viewModel) { viewModel.prepend() }
        }
    items(snapshot.items) { item -> Text("Item: $item") }
    item {
            /**
            * Load more items when users scroll near the bottom of loaded items.
            */
          LaunchedEffect(viewModel) { viewModel.append() }
      }
    }
    
  • asState API ব্যবহার করার সময় লোড সংক্রান্ত সমস্যা থেকে রিকভার করতে Pager.refresh এবং Pager.retry যোগ করা হয়েছে। নতুন API-এর আরও স্যাম্পেল ব্যবহার দেখতে এই ডকুমেন্ট দেখুন। (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)

ভার্সন ৩.৪

ভার্সন ৩.৪.২

১১ মার্চ, ২০২৬

androidx.paging:paging-*:3.4.2 রিলিজ করা হয়েছে। ভার্সন 3.4.2-এ এইসব কমিট আছে।

কোনও পরিবর্তন করা হয়নি

  • এই রিলিজে ৩.৪.১ ভার্সন থেকে কোনও API বা আচরণগত পরিবর্তন নেই।

ভার্সন ৩.৪.১

১১ ফেব্রুয়ারি, ২০২৬

androidx.paging:paging-*:3.4.1 রিলিজ করা হয়েছে। ভার্সন 3.4.1-এ এইসব কমিট রয়েছে।

ডিপেন্ডেন্সি আপডেট

  • paging-guava-এর guava ডিপেন্ডেন্সি ভার্সন ৩১.১ থেকে ৩২.০.১-এ আপডেট করা হয়েছে।

ভার্সন 3.4.0

২৮ জানুয়ারি, ২০২৬

androidx.paging:paging-*:3.4.0 রিলিজ করা হয়েছে। ভার্সন 3.4.0-এ এইসব কমিট রয়েছে।

3.3.0 ভার্সনের পর থেকে হওয়া গুরুত্বপূর্ণ পরিবর্তন:

  • paging-common, paging-testing ও paging-compose-এ আরও KMP টার্গেট যোগ করা হয়েছে। মোটকথা, এগুলি এখন JVM(Android ও ডেস্কটপ), নেটিভ (Linux, iOS, watchOS, tvOS, macOS, MinGW) ও ওয়েব (JavaScript, WasmJS) প্ল্যাটফর্মে কাজ করে
  • Jetbrains-এর macosX64 টার্গেট বন্ধ করে দেওয়ার সাথে সামঞ্জস্য রেখে paging-common, paging-testing ও paging-compose, macosX64, iosX64, watchosX64 ও tvosX64-এর জন্য সহায়তা সরিয়ে দিয়েছে।
  • টার্গেট পজিশনের সবচেয়ে কাছাকাছি থাকা এবং ইনপুট প্রেডিকেটের সাথে ম্যাচ করা লোড করা আইটেম ফিরিয়ে আনতে নতুন PagingState API closestItemAroundPosition যোগ করা হয়েছে। এটি আইটেম-ভিত্তিক রিফ্রেশ কী জেনারেট করতে ব্যবহার করা যেতে পারে যেখানে আদর্শ অ্যাঙ্করযোগ্য আইটেমটি আশেপাশে থাকে তবে সঠিক টার্গেট পজিশনে থাকে না।

ভার্সন 3.4.0-rc01

১৪ জানুয়ারি, ২০২৬

androidx.paging:paging-*:3.4.0-rc01 রিলিজ করা হয়েছে। 3.4.0-rc01 ভার্সনে এইসব কমিট রয়েছে।

নতুন ফিচার

ভার্সন 3.4.0-beta01

১৭ ডিসেম্বর, ২০২৫

androidx.paging:paging-*:3.4.0-beta01 রিলিজ করা হয়েছে। 3.4.0-beta01 ভার্সনে এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • RecyclerView ও Refresh লোডের মধ্যে রেস সংক্রান্ত সমস্যা সমাধান করুন যার ফলে RecyclerView-এ IndexOutOfBoundsException হয়। ধারাবাহিক Refresh লোড হওয়ার কারণে UI আপডেট বাধা পেলে, পেজিং স্টেট RecyclerView-এর সাথে ডিসিঙ্ক হতে পারে। রিফ্রেশ করার সময় কোনও বাধা এলে (যেমন, পরপর Refresh লোড হলে), পেজিংকে রিফ্রেশ করার আগের অবস্থায় রিসেট করে এই সমস্যার সমাধান করা হয়। (I771b0, b/409809768)

ভার্সন 3.4.0-alpha04

১০ সেপ্টেম্বর, ২০২৫

androidx.paging:paging-*:3.4.0-alpha04 রিলিজ করা হয়েছে। ভার্সন 3.4.0-alpha04-এ এইসব কমিট আছে।

API-তে পরিবর্তন

  • টার্গেট পজিশনের সবচেয়ে কাছাকাছি থাকা এবং ইনপুট প্রেডিকেটের সাথে ম্যাচ করা লোড করা আইটেম ফিরিয়ে আনতে নতুন PagingState API closestItemAroundPosition যোগ করা হয়েছে। এটি আইটেম-ভিত্তিক রিফ্রেশ কী তৈরি করতে ব্যবহার করা যেতে পারে যেখানে আদর্শ অ্যাঙ্করযোগ্য আইটেমটি কাছাকাছি থাকে তবে সঠিক টার্গেট পজিশনে থাকে না। (I96e5c, b/440187139)

ভার্সন 3.4.0-alpha03

২৭ আগস্ট, ২০২৫

androidx.paging:paging-*:3.4.0-alpha03 রিলিজ করা হয়েছে। 3.4.0-alpha03 ভার্সনে এইসব কমিট আছে।

নতুন ফিচার

  • Paging-common নতুন Kotlin Multiplatform (KMP) টার্গেট হিসেবে ডেস্কটপ যোগ করেছে। এটি এখন JVM(Android ও ডেস্কটপ), নেটিভ (Linux, iOS, watchOS, tvOS, macOS, MinGW) এবং ওয়েব (JavaScript, WasmJS) প্ল্যাটফর্মে কাজ করে। (Id2483, b/436884811)
  • পেজিং-টেস্টিংয়ে নতুন Kotlin Multiplatform (KMP) টার্গেট যোগ করা হয়েছে। এটি এখন JVM(Android ও ডেস্কটপ), নেটিভ (Linux, iOS, watchOS, tvOS, macOS, MinGW) ও ওয়েব (JavaScript, WasmJS) প্ল্যাটফর্মে কাজ করে। (I0c543, b/435014650)
  • Paging-compose নতুন Kotlin Multiplatform (KMP) টার্গেট যোগ করেছে। এটি এখন JVM(Android ও ডেস্কটপ), নেটিভ (Linux, iOS, watchOS, tvOS, macOS, MinGW) ও ওয়েব (JavaScript, WasmJS)-এ কাজ করে। (I70d44, b/436884801)

API-তে পরিবর্তন

ভার্সন 3.4.0-alpha02

৩০ জুলাই, ২০২৫

androidx.paging:paging-*:3.4.0-alpha02 রিলিজ করা হয়েছে। 3.4.0-alpha02 ভার্সনে এইসব কমিট আছে।

API-তে পরিবর্তন

  • PagingData.from এখন placeholdersBefore ও placeholdersAfter সেট করার অনুমতি দেয়। মনে রাখবেন, এইসব প্লেসহোল্ডারের মধ্যে দিয়ে স্ক্রল করলে লোড ট্রিগার হয় না। (I06983)

ভার্সন 3.4.0-alpha01

২ জুলাই, ২০২৫

androidx.paging:paging-*:3.4.0-alpha01 রিলিজ করা হয়েছে। ভার্সন 3.4.0-alpha01-এ এইসব কমিট আছে।

নতুন ফিচার

সমস্যার সমাধান

  • Android ইউনিট টেস্ট যা Paging 3.3 বা তার পরবর্তী ভার্সন থেকে পুল করা হয়, তা আর PagingLogger থেকে থ্রো করবে না (Ia9400, b/331684448)
  • RecyclerView আপডেট করার সময় ব্যবহারকারী স্ক্রল করলে RecyclerView-এ IndexOutOfBoundsException দেখানোর সমস্যা সমাধান করা হয়েছে (Id1f16, b/381024738)
  • স্ক্রল করার সময় রিফ্রেশ করলে পেজিং আরও লোড ট্রিগার করতে না পারার সমস্যা সমাধান করা হয়েছে। (I60ca5, b/352586078)
  • পেজিং আইটেম রিফ্রেশ করার সময় স্ক্রল করলে ক্র্যাশ হওয়ার সমস্যার সমাধান করা হয়েছে। (I8c65a, b/347649763)

ভার্সন 3.3

ভার্সন 3.3.6

১২ ফেব্রুয়ারি, ২০২৫

androidx.paging:paging-*:3.3.6 রিলিজ করা হয়েছে। ভার্সন 3.3.6-এ এইসব কমিট আছে।

সমস্যার সমাধান

  • প্রাথমিক রিফ্রেশ করার সময় পাঠানো রিফ্রেশ ও আবার চেষ্টা করার সিগন্যাল এখন স্টোর করা হবে এবং পেজিং প্রেজেন্টার রেডি হয়ে গেলে অটোমেটিক আবার পাঠানো হবে।

এক্সটার্নাল কন্ট্রিবিউশন

  • Eva, বাগ ফিক্স (#754) জমা দেওয়ার জন্য ধন্যবাদ

ভার্সন 3.3.5

১১ ডিসেম্বর, ২০২৪

androidx.paging:paging-*:3.3.5 রিলিজ করা হয়েছে। ভার্সন 3.3.5-এ এইসব কমিট আছে।

সমস্যার সমাধান

  • RecyclerView আপডেট করার সময় ব্যবহারকারী স্ক্রল করলে RecyclerView IndexOutOfBoundsException দেখায়, এই সমস্যার সমাধান করা হয়েছে। (Id1f16, b/381024738)

ভার্সন 3.3.4

১৩ নভেম্বর, ২০২৪

androidx.paging:paging-*:3.3.4 রিলিজ করা হয়েছে। ভার্সন 3.3.4-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • Android ইউনিট টেস্টে Paging 3.3 বা তার পরবর্তী ভার্সন পুল করলে, Method isLoggable in android.util.Log not mocked-এর মতো কোনও সমস্যা আর দেখাবে না। (Ia9400, b/331684448)

ভার্সন 3.3.2

৭ আগস্ট, ২০২৪

androidx.paging:paging-*:3.3.2 রিলিজ করা হয়েছে। ভার্সন 3.3.2-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • paging-common এবং paging-testing নতুন Kotlin-Multiplatform টার্গেট যোগ করেছে: watchos, tvos এবং linuxArm64 (90c9768), (53e0eca)

ভার্সন 3.3.1

২৪ জুলাই, ২০২৪

androidx.paging:paging-*:3.3.1 রিলিজ করা হয়েছে। ভার্সন 3.3.1-এ এইসব কমিট আছে।

সমস্যার সমাধান

  • স্ক্রল করার সময় ব্যাক-আপ ডেটা সোর্স রিফ্রেশ করা হলে, AsyncPagingDataDiffer বা RecyclerView-এর সাথে ব্যবহার করা PagingDataAdapter-এর মতো এর উপরে তৈরি করা API আরও লোড ট্রিগার করতে না পারার সমস্যা সমাধান করা হয়েছে। (I60ca5, b/352586078)
  • PagingDataAdapter বা AsyncPagingDataDiffer ব্যবহার করে RecyclerView স্ক্রল করার সময় ব্যাকিং ডেটা সোর্স থেকে আইটেম সরিয়ে দেওয়ার সময় ক্র্যাশ হওয়ার সমস্যার সমাধান করা হয়েছে। (I8c65a, b/347649763)

ভার্সন 3.3.0

১৪ মে, ২০২৪

androidx.paging:paging-*:3.3.0 রিলিজ করা হয়েছে। ভার্সন 3.3.0-এ এইসব কমিট আছে।

3.2.0 ভার্সনের পর থেকে হওয়া গুরুত্বপূর্ণ পরিবর্তন

  • PagingDataPresenter এখন একটি সর্বজনীন ক্লাস। ইন্টার্নাল পেজিং API বা paging-runtime-এর AsyncPagingDataDiffer-এর প্রয়োজন ছাড়াই এখন PagingDataPresenter-এর উপরে মাল্টিপ্ল্যাটফর্ম প্রেজেন্টার তৈরি করা যাবে।
  • hasError ও isIdle-এ নতুন LoadStates ও CombinedLoadStates হেল্পার পদ্ধতি যোগ করা হয়েছে, যাতে চেক করা যায় যে LoadStates যথাক্রমে Error বা NotLoading স্টেটে আছে কিনা। এছাড়াও, Flow<CombinedLoadStates>-এ একটি নতুন awaitNotLoading() Kotlin এক্সটেনশন পদ্ধতি যোগ করা হয়েছে যা লোড NotLoading বা সমস্যা সংক্রান্ত স্ট্যাটাসে সেটেল না হওয়া পর্যন্ত অপেক্ষা করে।
  • PagingData.empty() এখন ডিফল্ট হিসেবে NotLoading স্টেট ডিসপ্যাচ করে, যদি না কাস্টম LoadStates এর কনস্ট্রাক্টরে পাস করা হয়। এটি বর্তমান আচরণ থেকে আলাদা যেখানে PagingDataAdapter-এ জমা দেওয়ার সময় এটি LoadStates ডিসপ্যাচ করে না বা LazyPagingItems হিসাবে সংগ্রহ করার সময় এটি লোডিং স্টেট ডিসপ্যাচ করে। LazyPagingItems হিসেবে সংগ্রহ করা হলে, প্রাথমিক কম্পোজিশনের পরে এটি অবিলম্বে একটি খালি তালিকাও দেখাবে।

Kotlin মাল্টিপ্ল্যাটফর্মের সাথে মানানসই

CashApp-এর multiplatform-paging প্রোজেক্ট থেকে আপস্ট্রিম করা কাজের জন্য, পেজিং এখন Kotlin Multiplatform-এর সাথে মানানসই আর্টিফ্যাক্ট শিপ করে।

  • paging-common সব Paging 3 API common-এ সরিয়ে দিয়েছে এবং এখন Android ছাড়াও jvm ও iOS-এর সাথে মানানসই।
  • paging-testing তার কোড common-এ সরিয়ে নিয়ে গেছে এবং এখন Android ছাড়াও jvm এবং iOS-এর সাথে মানানসই।
  • paging-compose তার কোড common-এ সরিয়ে নিয়ে গেছে এবং androidx.compose-এর মাল্টিপ্ল্যাটফর্ম সাপোর্টের সাথে ম্যাচ করে এমন একটি Android আর্টিফ্যাক্ট শিপ করে।
  • paging-runtime, paging-guava, paging-rxjava2 এবং paging-rxjava3 শুধুমাত্র Android-এ কাজ করবে।

ভার্সন 3.3.0-rc01

১ মে, ২০২৪

Paging 3.3.0-beta01-এ কোনও পরিবর্তন না করেই androidx.paging:paging-*:3.3.0-rc01 রিলিজ করা হয়েছে। ভার্সন 3.3.0-rc01-এ এইসব কমিট রয়েছে।

ভার্সন 3.3.0-beta01

৩ এপ্রিল, ২০২৪

androidx.paging:paging-*:3.3.0-beta01-এ কোনও উল্লেখযোগ্য পরিবর্তন করা হয়নি। ভার্সন 3.3.0-beta01-এ এইসব কমিট রয়েছে।

ভার্সন 3.3.0-alpha05

২০ মার্চ, ২০২৪

androidx.paging:paging-*:3.3.0-alpha05 রিলিজ করা হয়েছে। ভার্সন 3.3.0-alpha05-এ এইসব কমিট আছে।

API-তে পরিবর্তন

  • পেজিং এখন সাধারণ কোডের জন্য AndroidX অ্যানোটেশন @MainThread অ্যানোটেশন ব্যবহার করে। (I78f0d, b/327682438)

ভার্সন 3.3.0-alpha04

৬ মার্চ, ২০২৪

androidx.paging:paging-*:3.3.0-alpha04 রিলিজ করা হয়েছে। ভার্সন 3.3.0-alpha04-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • Kotlin মাল্টিপ্ল্যাটফর্মের সাথে সামঞ্জস্য যোগ করা সম্পর্কিত ডকুমেন্টেশনে হওয়া ছোটখাটো সমস্যা সমাধান করা হয়েছে। (aosp/2950785)

ভার্সন 3.3.0-alpha03

৭ ফেব্রুয়ারি, ২০২৪

androidx.paging:paging-*:3.3.0-alpha03 রিলিজ করা হয়েছে। ভার্সন 3.3.0-alpha03-এ এইসব কমিট আছে।

নতুন ফিচার

  • PagingDataPresenter এখন একটি সর্বজনীন ক্লাস। ইন্টার্নাল পেজিং API বা paging-runtime-এর AsyncPagingDataDiffer-এর প্রয়োজন ছাড়াই এখন PagingDataPresenter-এর উপরে মাল্টিপ্ল্যাটফর্ম প্রেজেন্টার তৈরি করা যাবে। (Id1f74, b/315214786)
  • LoadStates-এ কোনও সমস্যা আছে কিনা বা NotLoading স্ট্যাটাসে আছে কিনা তা চেক করার জন্য নতুন LoadStates এবং CombinedLoadStates সহায়ক পদ্ধতি যোগ করা হয়েছে। এছাড়াও, একটি নতুন API যোগ করা হয়েছে যা LoadStateFlow-এ অপেক্ষা করে যতক্ষণ না লোড NotLoading বা সমস্যা সংক্রান্ত স্ট্যাটাসে সেটেল হয়। (Id6c67)

আচরণে পরিবর্তন

  • PagingData.empty() এখন ডিফল্ট হিসেবে NotLoading স্টেট ডিসপ্যাচ করে, যদি না কাস্টম LoadStates এর কনস্ট্রাক্টরে পাস করা হয়। এটি বর্তমান আচরণ থেকে আলাদা যেখানে PagingDataAdapter-এ জমা দেওয়ার সময় এটি LoadStates ডিসপ্যাচ করে না বা LazyPagingItems হিসাবে সংগ্রহ করার সময় এটি লোডিং স্টেট ডিসপ্যাচ করে। LazyPagingItems হিসেবে সংগ্রহ করা হলে, এটি এখন প্রাথমিক কম্পোজিশনের সাথে সাথেই একটি খালি তালিকাও দেখাবে। (I4d11d, b/301833847)

ভার্সন 3.3.0-alpha02

২০ সেপ্টেম্বর, ২০২৩

androidx.paging:paging-*:3.3.0-alpha02 রিলিজ করা হয়েছে। ভার্সন 3.3.0-alpha02-এ এইসব কমিট আছে।

Kotlin মাল্টিপ্ল্যাটফর্মের সাথে মানানসই

পেজিং এখন Kotlin Multiplatform-এর সাথে মানানসই আর্টিফ্যাক্ট শিপ করে, CashApp-এর multiplatform-paging প্রোজেক্ট থেকে আপস্ট্রিম করা কাজের জন্য এটি সম্ভব হয়েছে। এটি আমাদের দুটি রিপোজিটরির মধ্যে পার্থক্য এড়াতে এবং তাদের সামঞ্জস্যপূর্ণ রাখতে সাহায্য করবে।

  • paging-common সব Paging 3 API common-এ সরিয়ে দিয়েছে এবং এখন Android ছাড়াও jvm ও iOS-এর সাথে মানানসই।
  • paging-testing তার কোড common-এ সরিয়ে নিয়ে গেছে এবং এখন Android ছাড়াও jvm এবং iOS-এর সাথে মানানসই।
  • paging-compose তার কোড common-এ সরিয়ে নিয়ে গেছে এবং androidx.compose-এর মাল্টিপ্ল্যাটফর্ম সাপোর্টের সাথে ম্যাচ করে এমন একটি Android আর্টিফ্যাক্ট শিপ করে।
  • paging-runtime, paging-guava, paging-rxjava2 এবং paging-rxjava3 শুধুমাত্র Android-এ কাজ করবে।

API-তে পরিবর্তন

  • পাবলিক Logger ইন্টারফেস যা শুধুমাত্র ইন্টার্নাল ব্যবহারের জন্য ছিল তা বন্ধ করে দেওয়া হয়েছে (I16e95, b/288623117)

এক্সটার্নাল কন্ট্রিবিউশন

ভার্সন 3.3.0-alpha01

২০ সেপ্টেম্বর, ২০২৩

  • এটি androidx.paging লাইব্রেরির প্রথম মাল্টিপ্ল্যাটফর্ম রিলিজ। এই ভার্সনে শুধু *-jvm ও *-android আর্টিফ্যাক্ট আছে। macOS, iOS ও Linux ভ্যারিয়েন্টের জন্য 3.3.0-alpha02 ব্যবহার করুন।

ভার্সন ৩.২

ভার্সন ৩.২.১

৬ সেপ্টেম্বর, ২০২৩

androidx.paging:paging-*:3.2.1 রিলিজ করা হয়েছে। ভার্সন 3.2.1-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • পেজিং টেস্টিং আর্টিফ্যাক্টের asSnapshot() API-তে PagingData.from(List) ব্যবহার করে তৈরি করা ফ্লো পাস করা হলে, সেটি হ্যাং হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে। কারণ, লোডিং কখন শেষ হয়েছে সেই ব্যাপারে asSnapshot()-এর কাছে কোনও তথ্য থাকে না (PagingData.from(List, LoadStates) ওভারলোডের মতো নয়)। এই সমাধান শুধুমাত্র সম্পূর্ণ করা যায় এমন ফ্লোয়ের (যেমন, flowOf(PagingData.from(...))) ক্ষেত্রে কাজ করে। সম্পূর্ণ করা যায় না এমন ফ্লোয়ের (যেমন, MutableStateFlow) ক্ষেত্রে PagingData.from ওভারলোড ব্যবহার করুন যা LoadStates প্রদান করে। (I502c3)
  • লোডিং সম্পূর্ণ হওয়ার সাথে সাথেই একই ফ্রেমে নতুন ডেটা যাতে উপলভ্য হয় তা নিশ্চিত করতে, পেজিং কম্পোজ এখন ইন্টার্নালি AndroidUiDispatcher.Main ব্যবহার করে। (Ia55af)

ভার্সন 3.2.0

২৬ জুলাই, ২০২৩

androidx.paging:paging-*:3.2.0 রিলিজ করা হয়েছে। ভার্সন 3.2.0-এ এইসব কমিট রয়েছে।

3.1.0 ভার্সনের পর থেকে গুরুত্বপূর্ণ পরিবর্তন

  • পেজিং কম্পোজ API স্টেবিলিটিতে পৌঁছেছে এবং পেজিংয়ের বাকি অংশে মার্জ করা হয়েছে যেখানে এর ভার্সন এখন অন্যান্য সব পেজিং আর্টফ্যাক্টের সাথে ম্যাচ করে। 3.1.0 থেকে হওয়া পরিবর্তনগুলির মধ্যে এগুলি অন্তর্ভুক্ত:
    • PagingData.from(fakeData) তৈরি করে এবং PagingData-কে MutableStateFlow-এ (যেমন, MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) র‍্যাপ করে ফেক ডেটার তালিকা প্রিভিউ করার জন্য সহায়তা। প্রিভিউ করার জন্য collectAsLazyPagingItems()-এর রিসিভার হিসেবে এই ফ্লো @Preview কম্পোজেবলে পাস করুন।
    • Wear ও TV লাইব্রেরি থেকে LazyVerticalGrid ও HorizontalPager-এর মতো সব লেজি লেআউট ও কাস্টম লেজি কম্পোনেন্ট কাজ করে। এটি নতুন লোয়ার লেভেল LazyPagingItems এক্সটেনশন পদ্ধতি itemKey এবং itemContentType-এর মাধ্যমে করা হয়েছে, যা আপনাকে key এবং contentType প্যারামিটার স্ট্যান্ডার্ড items API-তে প্রয়োগ করতে সাহায্য করে, যা আগে থেকেই LazyColumn, LazyVerticalGrid-এর জন্য উপলভ্য এবং HorizontalPager-এর মতো API-তে এর সমতুল্য।
    • items(lazyPagingItems) এবং itemsIndexed(lazyPagingItems) যা শুধুমাত্র LazyListScope-এ কাজ করে তা বন্ধ করে দেওয়া হয়েছে।
  • নতুন paging-testing আর্টিফ্যাক্ট যা আপনার অ্যাপের প্রতিটি লেয়ারের ইউনিট টেস্টিং এবং আইসোলেশনে পেজিংয়ের সাথে এর ইন্টিগ্রেশনকে কেন্দ্র করে ডিজাইন করা API প্রদান করে। যেমন, এর মধ্যে অন্তর্ভুক্ত হল
    • TestPager ক্লাস যা আপনাকে পেজার এবং আসল UI থেকে স্বাধীনভাবে আপনার নিজস্ব কাস্টম PagingSource ইমপ্লিমেন্টেশনের আচরণ যাচাই করতে দেয়।
    • ​​asPagingSourceFactory Flow<List<Value>> বা স্ট্যাটিক List<Value>-কে PagingSourceFactory-এ পরিবর্তন করার API, যা পরীক্ষার সময় Pager-এ পাস করা যেতে পারে
    • Flow<PagingData<Value>>-এ asSnapshot Kotlin এক্সটেনশন, যা Flow<PagingData<Value>>-কে সরাসরি List<Value>-এ অনুবাদ করে। asSnapshot lambda আপনাকে scrollTo বা appendScrollWhile-এর মতো API-এর মাধ্যমে আপনার অ্যাপের UI-এর মতো দেখতে একটি UI তৈরি করতে দেয়, যাতে আপনি যাচাই করতে পারেন যে পেজ করা ডেটার সেটের যেকোনও পয়েন্টে ডেটার স্ন্যাপশট সঠিক আছে কিনা।
  • দুটি লেভেলে পেজিং ডিবাগিং তথ্য প্রকাশ করতে ডিফল্ট লগ যোগ করা হয়েছে: VERBOSE এবং DEBUG। adb shell setprop log.tag.Paging [DEBUG|VERBOSE] কমান্ডের মাধ্যমে লগ চালু করা যেতে পারে। এটি ভিউ সহ পেজিং বা কম্পোজ সহ পেজিং, দুটির ক্ষেত্রেই প্রযোজ্য।
  • PagingDataAdapter এবং AsyncPagingDataDiffer-এর জন্য কনস্ট্রাক্টর যোগ করা হয়েছে যা CoroutineDispatcher-এর পরিবর্তে CoroutineContext গ্রহণ করে।
  • নতুন PagingSourceFactory ফাংশনাল ইন্টারফেস যোগ করা হয়েছে যা আগের () -> PagingSource ল্যাম্বডার চেয়ে আরও স্পষ্ট API সারফেস প্রদান করে। Pager ইনস্ট্যানশিয়েট করার জন্য এই ফ্যাক্টরি ব্যবহার করা যেতে পারে।

ভার্সন 3.2.0-rc01

২১ জুন, ২০২৩

androidx.paging:paging-*:3.2.0-rc01 রিলিজ করা হয়েছে। ভার্সন 3.2.0-rc01-এ এইসব কমিট রয়েছে।

এক্সটার্নাল কন্ট্রিবিউশন

  • Android/JVM-এর নির্দিষ্টতা থেকে পেজিং সরানোর কাজে কন্ট্রিবিউট করার জন্য Veyndan-কে ধন্যবাদ। (#৫৫৩, #৫৫৪, #৫৫৫, #৫৫৯)

ভার্সন 3.2.0-beta01

৭ জুন, ২০২৩

androidx.paging:paging-*:3.2.0-beta01 রিলিজ করা হয়েছে। ভার্সন 3.2.0-beta01-এ এইসব কমিট আছে।

পেজিং কম্পোজ

  • পেজিং কম্পোজ আনুষ্ঠানিকভাবে API স্টেবিলিটিতে পৌঁছেছে। সেই জন্য, 1.0.0-alpha20 থেকে ভার্সন আপডেট করা হয়েছে যাতে এখন এটি অন্যান্য পেজিং আর্টিফ্যাক্টের ভার্সনের সাথে ম্যাচ করে।

API-তে পরিবর্তন

  • পেজিং কম্পোজ থেকে বন্ধ হয়ে যাওয়া items(LazyPagingItems) এবং itemsIndexed(LazyPagingItems) API সরিয়ে দেওয়া হয়েছে। তাদের রিপ্লেসমেন্ট API-এর উদাহরণ দেখতে পেজিং কম্পোজ 1.0.0-alpha20 রিলিজ নোট দেখুন। (I9626e)

ভার্সন 3.2.0-alpha06

২৪ মে, ২০২৩

androidx.paging:paging-*:3.2.0-alpha06 রিলিজ করা হয়েছে। ভার্সন 3.2.0-alpha06-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • নতুন PagingSourceFactory ফাংশনাল ইন্টারফেস যোগ করা হয়েছে যা আগে থেকে থাকা () -> PagingSource ল্যাম্বডার থেকে আরও স্পষ্ট API সারফেস প্রদান করে। Pager-এর ইনস্ট্যান্স তৈরি করতে এই ফ্যাক্টরি ব্যবহার করা যেতে পারে। (I33165, b/280655188)
  • paging-testing API-এর List<Value>.asPagingSourceFactory() নতুন ভার্সন যোগ করা হয়েছে, যা PagingSourceFactory পেতে সাহায্য করে এবং শুধু ডেটার অপরিবর্তনীয় তালিকা থেকে লোড হয়। স্ট্যাটিক ডেটার একাধিক জেনারেশন নিয়ে পরীক্ষা করার জন্য Flow<List<Value>>-এ আগে থেকে থাকা এক্সটেনশন এখনও ব্যবহার করা উচিত। (Id34d1, b/280655188)

API-তে পরিবর্তন

  • পেজিং-টেস্টিংয়ের সমস্ত পাবলিক API এখন @VisibleForTesting দিয়ে অ্যানোটেট করা হয়েছে যাতে এগুলি শুধুমাত্র টেস্টেই ব্যবহার করা যায়। (I7db6e)
  • asSnapshot API-তে আর CoroutineScope পাস করার প্রয়োজন নেই। এটি এখন ডিফল্ট হিসেবে এর পেরেন্ট স্কোপ থেকে প্রাপ্ত কনটেক্সট ব্যবহার করে। (Id0a78, b/282240990)
  • TestPager কনস্ট্রাক্টর প্যারামিটারকে আবার সাজানো হয়েছে যাতে আসল Pager কনস্ট্রাক্টর প্যারামিটারের (I6185a) ক্রমের সাথে স্বজ্ঞাতভাবে মিলে যায়
  • টাইপ () -> PagingSource<Key, Value> থেকে টাইপ PagingSourceFactory<Key, Value>-এ মাইগ্রেট করা পেজিং-টেস্টিংয়ের ল্যাম্বডা ব্যবহার। (I4a950, b/280655188)

আচরণে পরিবর্তন

  • asSnapshot পেজিং টেস্ট চালানোর জন্য মূল ডিসপ্যাচার আর প্রয়োজন নেই। এটি সেট করলে টেস্টের আচরণে আর কোনও পরিবর্তন হয় না। (Ie56ea)

ভার্সন 3.2.0-alpha05

৩ মে, ২০২৩

androidx.paging:paging-*:3.2.0-alpha05 রিলিজ করা হয়েছে। ভার্সন 3.2.0-alpha05-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • asSnapshot-এর পেজিং টেস্টিং API এখন ডিফল্ট হিসেবে এর loadOperations প্যারামিটারকে ফাঁকা ল্যাম্বডাতে সেট করে। এটি প্রাথমিক রিফ্রেশ লোড থেকে ডেটা ফিরিয়ে আনার জন্য কোনও লোড অপারেশন পাস না করেই asSnapshot কল করার অনুমতি দেয়। (Ied354, b/277233770)

ডকুমেন্টেশন সংক্রান্ত উন্নতি

  • asPagingSourceFactory()-এর ডকুমেন্টেশন আপডেট করে এটি স্পষ্ট করা হয়েছে যে এটি Flow-এর একটি এক্সটেনশন পদ্ধতি যা PagingSource ইনস্ট্যান্স তৈরি করার জন্য একটি আবার ব্যবহারযোগ্য ফ্যাক্টরি রিটার্ন করে। (I5ff4f, I705b5)
  • জাম্পিংয়ের সুবিধা দিতে itemsBefore ও itemsAfter ওভাররাইড করার প্রয়োজনীয়তা স্পষ্ট করতে LoadResult.Pageকনস্ট্রাক্টরের ডকুমেন্টেশন আপডেট করা হয়েছে। (Ied354)

এক্সটার্নাল কন্ট্রিবিউশন

  • Android/JVM স্পেসিফিক থেকে পেজিং সরানোর কাজে কন্ট্রিবিউট করার জন্য Veyndan-কে ধন্যবাদ। (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)

ভার্সন 3.2.0-alpha04

৮ ফেব্রুয়ারি, ২০২৩

androidx.paging:paging-*:3.2.0-alpha04 রিলিজ করা হয়েছে। ভার্সন 3.2.0-alpha04-এ এইসব কমিট আছে।

পেজিং টেস্টিং

  • paging-testing আর্টিফ্যাক্টে এখন একটি asPagingSourceFactory পদ্ধতি রয়েছে যার মাধ্যমে Flow<List<Value>> থেকে pagingSourceFactory তৈরি করে পেজারে পাঠানো যায়। Flow থেকে নির্গত প্রতিটি List<Value>>, Paged ডেটার একটি জেনারেশনকে উপস্থাপন করে। এটি পেজিং টেস্টের সুবিধা দেয়, যেমন, পেজারের সংগ্রহ করার জন্য ডেটা সোর্স নকল করে PagingData ট্রান্সফর্মেশন। (I6f230, b/235528239)
  • paging-testing আর্টিফ্যাক্টকে Flow<PagingData<T>>-এর মধ্যে থাকা ডেটা সঠিক কিনা তা যাচাই করার উপযুক্ত নতুন API-এর মাধ্যমে আরও উন্নত করা হয়েছে। এটি, উদাহরণস্বরূপ, আপনার ViewModel লেয়ার থেকে Flow<PagingData<T>>-এর আউটপুট অ্যাসার্ট করতে ব্যবহার করা যেতে পারে।

    এটি asSnapshot Kotlin এক্সটেনশন অন Flow<PagingData<Value>>-এর মাধ্যমে করা হয়, যা Flow<PagingData<Value>>-কে সরাসরি List<Value>-এ অনুবাদ করে। asSnapshot ল্যাম্বডা আপনাকে scrollTo বা appendScrollWhile-এর মতো API-এর মাধ্যমে আপনার অ্যাপের UI-কে এমনভাবে অনুকরণ করতে দেয় যা পুনরাবৃত্তিযোগ্য এবং সামঞ্জস্যপূর্ণ যাতে আপনি আপনার পেজ করা ডেটার সেটের যেকোনো পয়েন্টে ডেটার স্ন্যাপশট সঠিক কিনা তা যাচাই করতে পারেন।

    // Create your ViewModel instance
    val viewModel = …
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != “Header 1” }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected values
    

    asSnapshot হল একটি suspend পদ্ধতি যা runTest-এর মধ্যে চালানো হবে বলে আশা করা হচ্ছে। আরও তথ্যের জন্য Android-এ Kotlin coroutines পরীক্ষা করা দেখুন। (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)

API-তে পরিবর্তন

  • AsyncPagingDataDiffer এবং PagingDataAdapter-এ getItem এবং peek-এর UI কলগুলি এখন সঠিকভাবে শুধুমাত্র মূল থ্রেডে কল করা যায় হিসেবে চিহ্নিত করা হয়েছে। (I699b6)
  • TestPager-এর ব্যবহার করা জেনেরিক ধরনের ওয়াইল্ডকার্ড সরিয়ে দেওয়া হয়েছে, এর ফলে Java প্রোগ্রামিং ল্যাঙ্গোয়েজে লেখা কোডে সেইসব পদ্ধতির ফলাফল ব্যবহার করা সহজ হয়ে গেছে। (I56c42)

ভার্সন 3.2.0-alpha03

২৪ অক্টোবর, ২০২২

androidx.paging:paging-*:3.2.0-alpha03 রিলিজ করা হয়েছে। ভার্সন 3.2.0-alpha03-এ এইসব কমিট রয়েছে।

পেজিং টেস্টিং

এই রিলিজে নতুন আর্টিফ্যাক্ট আছে: paging-testing। এই আর্টিফ্যাক্ট আপনার অ্যাপের প্রতিটি লেয়ারের ইউনিট টেস্টিং এবং আইসোলেশনে পেজিংয়ের সাথে এর ইন্টিগ্রেশনের জন্য ডিজাইন করা API প্রদান করে।

যেমন, এই প্রথম রিলিজে একটি TestPager ক্লাস অন্তর্ভুক্ত আছে যা আপনাকে Pager এবং আসল UI থেকে স্বাধীনভাবে আপনার নিজস্ব কাস্টম PagingSource ইমপ্লিমেন্টেশনের আচরণ যাচাই করতে দেয় যা সাধারণত এন্ড-টু-এন্ড পেজিং ইন্টিগ্রেশন সিমুলেট করার জন্য প্রয়োজন হয়।

TestPager-কে নকল হিসেবে বিবেচনা করা উচিত - এটি টেস্ট ডাবল যা Pager-এর আসল ইমপ্লিমেন্টেশনের মতো কাজ করে, তবে PagingSource পরীক্ষা করার জন্য API সারফেসকে আরও সহজ করে দেয়। এই APIগুলি হল suspend API এবং Android-এ Kotlin coroutines পরীক্ষা করা সংক্রান্ত গাইডে যেমন উল্লেখ করা হয়েছে, সেই অনুযায়ী runTest-এর মধ্যে রান করা উচিত।

এইসব API-এর ব্যবহারের উদাহরণ room-paging টেস্ট-এ পাওয়া যাবে, যা TestPager ব্যবহার করার জন্য রিফ্যাক্টর করা হয়েছে।

API-তে পরিবর্তন

  • LoadResult.Page.iterator()-এর মাধ্যমে LoadResult.Page.data-এর উপর সুবিধাজনক ইটারেশন চালু করে। এটি পরোক্ষভাবে Kotlin স্ট্যান্ডার্ড লাইব্রেরি flatten পদ্ধতি ব্যবহার করার অনুমতি দেয় যখন List<LoadResult.Page> দেওয়া হয় যেমন PagingState-এর pages প্রপার্টি সহ যা PagingSource.getRefreshKey পদ্ধতিতে পাস করা হয়। (Ie0718)

ভার্সন 3.2.0-alpha02

১০ আগস্ট, ২০২২

androidx.paging:paging-*:3.2.0-alpha02 রিলিজ করা হয়েছে। ভার্সন 3.2.0-alpha02-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • PagingData থেকে সংগ্রহ করা ডিবাগিং তথ্য প্রকাশ করার জন্য পেজিং এখন AsyncPagingDataDifferবা PagingDataAdapter ক্লাসের মাধ্যমে লগ প্রদান করে।
  • adb shell কমান্ডের মাধ্যমে লগ চালু করা যেতে পারে adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)

সমস্যার সমাধান

  • রানটাইম paging-runtime:3.1.1 বা এর আগের ভার্সনের সাথে paging-common:3.2.0-alpha01 ব্যবহার করার সময় PagingDataDiffer কনস্ট্রাক্টর সংক্রান্ত সমস্যার সমাধান করা হয়েছে।(b/235256201)

ভার্সন 3.2.0-alpha01

১ জুন, ২০২২

androidx.paging:paging-*:3.2.0-alpha01 রিলিজ করা হয়েছে। ভার্সন 3.2.0-alpha01-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • PagingDataAdapter ও AsyncPagingDataDiffer-এর জন্য কনস্ট্রাক্টর যোগ করা হয়েছে, যা CoroutineDispatcher-এর পরিবর্তে CoroutineContext গ্রহণ করে। (Idc878)
  • ডিফল্ট হিসেবে, PagingData.from() এবং PagingData.empty() আর উপস্থাপকের দিক থেকে CombinedLoadStates-কে প্রভাবিত করবে না। sourceLoadStates এবং remoteLoadStates-কে এই কনস্ট্রাক্টরগুলিতে পাস করার অনুমতি দেয় এমন একটি নতুন ওভারলোড যোগ করা হয়েছে যাতে LoadStates-কে সম্পূর্ণ টার্মিনাল (অর্থাৎ, NotLoading(endOfPaginationReached = false)) বিকল্প সহ, প্রয়োজন হলে রিমোট স্টেটও অন্তর্ভুক্ত করার বিকল্প। LoadStates পাস না হলে, স্ট্যাটিক PagingData পাওয়ার সময় প্রেজেন্টারের দিকে আগের CombinedLoadStates বজায় রাখা হবে। (Ic3ce5, b/205344028)

সমস্যার সমাধান

  • PagingSource.getRefreshKey()-এর ফলাফল এখন initialKey-এর চেয়ে সঠিকভাবে বেশি অগ্রাধিকার পায়, যেখানে এটি নাল রিটার্ন করে, কিন্তু নন-নাল initialKey সেট করা হয়। (Ic9542, b/230391606)

এক্সটার্নাল কন্ট্রিবিউশন

  • test-coroutines-lib মাইগ্রেশনের (I3366d) কারণে :compose:ui:ui-test api (updateApi) আপডেট করা হয়েছে

ভার্সন ৩.১

ভার্সন 3.1.1

৯ মার্চ, ২০২২

androidx.paging:paging-*:3.1.1 রিলিজ করা হয়েছে। ভার্সন 3.1.1-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

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

ভার্সন 3.1.0

১৭ নভেম্বর, ২০২১

androidx.paging:paging-*:3.1.0 রিলিজ করা হয়েছে। ভার্সন 3.1.0-এ এইসব কমিট রয়েছে।

3.0.0 ভার্সনের পর থেকে গুরুত্বপূর্ণ পরিবর্তন

  • Flow<PagingData>.observable এবং Flow<PagingData>.flowable API আর পরীক্ষামূলক পর্যায়ে নেই
  • LoadState-এ আচরণগত পরিবর্তন:
    • PagingSource ও RemoteMediator, দুটির ক্ষেত্রেই LoadType.REFRESH-এর জন্য endOfPaginationReached এখন সবসময় false
    • পেজিং থেকে LoadStates এখন ডাউনস্ট্রিমে এমিট করার আগে PagingSource এবং RemoteMediator উভয়ের কাছ থেকে সঠিক ভ্যালুর জন্য অপেক্ষা করছে। PagingData-এর নতুন জেনারেশন এখন থেকে রিফ্রেশ স্টেট-এর জন্য সবসময় সঠিকভাবে Loading দিয়ে শুরু হবে, কিছু ক্ষেত্রে ভুলভাবে NotLoading-এ রিসেট হবে না।
    • প্রেজেন্টার API-তে .loadStateFlow এবং .addLoadStateListener আর অপ্রয়োজনীয়ভাবে প্রাথমিক CombinedLoadStates পাঠায় না, যেখানে সবসময় মধ্যস্থতাকারী স্ট্যাটাস null হিসেবে সেট করা থাকে
  • পুরনো জেনারেশন বাতিল করার প্রসেস এখন বাতিলকরণ / নতুন জেনারেশনের ক্ষেত্রে দ্রুত হয়। Flow<PagingData>-এ .collectLatest ব্যবহার করার আর প্রয়োজন হবে না, যদিও এটি এখনও করার জন্য সাজেস্ট করা হয়।
  • PagingSource.LoadResult.Invalid-কে PagingSource.load থেকে নতুন রিটার্ন টাইপ হিসেবে যোগ করা হয়েছে, যার ফলে পেজিং এই PagingSource-এ যেকোনও পেন্ডিং বা ভবিষ্যতের লোড অনুরোধ বাতিল করে দেয় এবং এটিকে অবৈধ করে দেয়। এই রিটার্ন টাইপটি সম্ভাব্য ভুল বা পুরনো ডেটা ম্যানেজ করার জন্য ডিজাইন করা হয়েছে যা ডেটাবেস বা নেটওয়ার্ক থেকে রিটার্ন করা যেতে পারে।
  • .onPagesPresented ও .addOnPagesUpdatedListener প্রেজেন্টার API যোগ করা হয়েছে, যা UI-তে পৃষ্ঠা দেখানোর সময় সিঙ্ক্রোনাসভাবে ট্রিগার হয়। নিম্নলিখিত পরিস্থিতিতে পৃষ্ঠা আপডেট হতে পারে:
    • নতুন প্রজন্মের PagingData-এর প্রাথমিক লোড সম্পূর্ণ হয়, নতুন প্রজন্মের আইটেমে কোনও পরিবর্তন থাকুক বা না থাকুক। অর্থাৎ, কোনও আপডেট ছাড়াই প্রাথমিক লোড সম্পূর্ণ করা একটি নতুন জেনারেশন এখনও এই কলব্যাক ট্রিগার করবে কারণ তালিকাটি ঠিক একই রকম।
    • পৃষ্ঠা যোগ করা হয়েছে, এমনকি যোগ করা পৃষ্ঠায় কোনও নতুন আইটেম না থাকলেও।
    • ড্রপ করা পৃষ্ঠাটি খালি থাকলেও, একটি পৃষ্ঠা ড্রপ করা হয়।

ভার্সন 3.1.0-rc01

৩ নভেম্বর, ২০২১

androidx.paging:paging-*:3.1.0-rc01 রিলিজ করা হয়েছে। ভার্সন 3.1.0-rc01-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • .cachedIn()-এ রেস কন্ডিশন + মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা হয়েছে। এটি এমন ক্ষেত্রে হয় যেখানে কোনও পর্যবেক্ষক না থাকলে বা কোনও পর্যবেক্ষক নতুন PagingData-তে পরিবর্তন করার সময় পেজিং ডাউনস্ট্রিমের মাধ্যমে একাধিক লোড ইভেন্ট পাঠানো হয়। (Ib682e)

ভার্সন 3.1.0-beta01

১৩ অক্টোবর, ২০২১

androidx.paging:paging-*:3.1.0-beta01 রিলিজ করা হয়েছে। ভার্সন 3.1.0-beta01-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • অনেক আইটেম দ্রুত অ্যাক্সেস করার ফলে prefetchDistance-এ বিবেচনা করার জন্য সেগুলি বাদ পড়ে যেতে পারে, যার ফলে পৃষ্ঠা লোড হতে দেরি হতে পারে। এই সমস্যার সমাধান করা হয়েছে। এটি বিশেষ করে তখন সমস্যা হয় যখন অনেক আইটেম এমনভাবে সাজানো হয় যে ব্যবহারকারীর স্ক্রল করার দিকের বিপরীতে লোড করার বিষয়টি অগ্রাধিকার পায়। এইসব আইটেম অ্যাক্সেস এখন বাফার করা হয়েছে এবং ড্রপ হওয়া থেকে আটকাতে সিঙ্ক্রোনাসভাবে অগ্রাধিকার দেওয়া হয়েছে। (aosp/1833273)

ভার্সন 3.1.0-alpha04

২৯ সেপ্টেম্বর, ২০২১

androidx.paging:paging-*:3.1.0-alpha04 রিলিজ করা হয়েছে। ভার্সন 3.1.0-alpha04-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • Flow<PagingData>.observable এবং Flow<PagingData>.flowable API আর পরীক্ষামূলক নয়। (Ie0bdd)

সমস্যার সমাধান

  • LoadStates-এর জন্য, endOfPaginationReached এখন সবসময় false LoadType.REFRESH-এর জন্য। আগে, RemoteMediator REFRESH-এর জন্য endOfPaginationReached true হতে পারত, কিন্তু PagingSource-এর জন্য নয়। এই আচরণটি এখন একত্রিত করা হয়েছে যাতে সর্বদা false রিটার্ন করে কারণ REFRESH-এর টার্মিনাল হওয়ার কোনও অর্থ হয় না এবং এখন LoadStates-এ API চুক্তির অংশ হিসাবে ডকুমেন্ট করা হয়েছে। পৃষ্ঠা সংখ্যা শেষ হয়েছে কিনা তা নির্ধারণ করার সময়, আপনাকে সবসময় APPEND বা PREPEND ডিরেকশন অনুযায়ী তা করতে হবে। (I047b6)
  • Paging থেকে LoadStates এখন জেনারেশনের মধ্যে ডাউনস্ট্রিম এমিট করার আগে PagingSource এবং RemoteMediator, উভয়ের থেকেই সঠিক ভ্যালুর জন্য অপেক্ষা করে। এটি CombinedLoadStates.source.refresh-এ নতুন প্রজন্মের PagingData থেকে NotLoading পাঠানো আটকায়, যদি এটি আগে থেকেই Loading থাকে; নতুন প্রজন্মের PagingData এখন সবসময় সঠিকভাবে Loading দিয়ে শুরু হবে, পরিবর্তে কিছু ক্ষেত্রে ভুলভাবে NotLoading-এ রিসেট করা হবে না।

    Cancellation on past generations now happen eagerly on invalidation / new generations. Flow<PagingData>-এ .collectLatest ব্যবহার করার আর প্রয়োজন নেই, যদিও এটি করার জন্য এখনও অত্যন্ত বেশি করে সাজেস্ট করা হয়। (I0b2b5, b/177351336, b/195028524)

  • প্রেজেন্টার API-তে .loadStateFlow ও .addLoadStateListener প্রাথমিক CombinedLoadStates আর অপ্রয়োজনীয়ভাবে পাঠায় না, যেটিতে সবসময় মিডিয়েটর স্টেট null ও সোর্স স্টেট NotLoading(endOfPaginationReached = false) সেট করা থাকে। এর অর্থ হল:

    1. আপনি RemoteMediator ব্যবহার করলে, মধ্যস্থতাকারীর স্ট্যাটাস সবসময় পপুলেট করা হবে।
    2. .loadStateFlow -এ নতুন loadState লিসনার বা নতুন কালেক্টর রেজিস্টার করলে, PagingData থেকে কোনও আসল CombinedLoadStates না পেলে আর সঙ্গে সঙ্গে বর্তমান ভ্যালু ইমিট করবে না। PagingData জমা দেওয়ার আগে কোনও কালেক্টর বা লিসেনার শুরু করলে এটি হতে পারে। (I1a748)

ভার্সন 3.1.0-alpha03

২১ জুলাই, ২০২১

androidx.paging:paging-*:3.1.0-alpha03 রিলিজ করা হয়েছে। ভার্সন 3.1.0-alpha03-এ এইসব কমিট আছে।

API-তে পরিবর্তন

  • PagingSource-এ তৃতীয় LoadResult রিটার্ন টাইপ LoadResult.Invalid যোগ করা হয়েছে। PagingSource.load, LoadResult.Invalid রিটার্ন করলে, পেজিং লোড করা ডেটা বাতিল করে দেবে এবং PagingSource-কে অবৈধ করে দেবে। এই রিটার্ন টাইপটি ডেটাবেস বা নেটওয়ার্ক থেকে ফেরত আসতে পারে এমন সম্ভাব্য ভুল বা বাসি ডেটা ম্যানেজ করার জন্য ডিজাইন করা হয়েছে।

    যেমন, যদি অন্তর্নিহিত ডেটাবেসে লেখা হয় কিন্তু PagingSource সময়মতো বাতিল না হয়, তাহলে এটি অসামঞ্জস্যপূর্ণ ফলাফল দেখাতে পারে যদি এর প্রয়োগ যে ব্যাকিং ডেটাসেট থেকে এটি লোড করে তার অপরিবর্তনীয়তার উপর নির্ভর করে (যেমন, LIMIT OFFSET স্টাইল db প্রয়োগ)। এই পরিস্থিতিতে, লোড করার পরে বাতিল করা হয়েছে কিনা তা চেক করে LoadResult.Invalid রিটার্ন করার জন্য সাজেস্ট করা হয়, এর ফলে এই PagingSource-এ কোনও বাকি থাকা বা ভবিষ্যতের লোড করার অনুরোধ বাতিল করে দেওয়া হয়।

    এই রিটার্ন টাইপ Paging2 API-তেও কাজ করে যা LivePagedList বা RxPagedList-এর সুবিধা নেয়। Paging2-এর PagedList API-এর সাথে PagingSource ব্যবহার করার সময়, PagedList অবিলম্বে আলাদা করা হয়, এই PagedList-এ ডেটা লোড করার পরবর্তী প্রচেষ্টা বন্ধ করে দেয় এবং PagingSource-এ বাতিল করার প্রসেস ট্রিগার করে।

    LoadResult হল একটি সিল করা ক্লাস, যার অর্থ হল এটি একটি সোর্স-ইনকম্প্যাটিবল পরিবর্তন, যার ফলে সরাসরি PagingSource.load ফলাফল ব্যবহার করা ইউজ কেসগুলিকে কম্পাইল টাইমে LoadResult.Invalid হ্যান্ডেল করতে হবে। যেমন, Kotlin ব্যবহারকারীরা রিটার্ন টাইপ চেক করার জন্য exhaustive-when ব্যবহার করলে, তাদের Invalid টাইপের জন্য একটি চেক যোগ করতে হবে। (Id6bd3, b/191806126, b/192013267)

সমস্যার সমাধান

  • PagingSource.registerInvalidatedCallback বা DataSource.addInvalidatedCallback-এর মাধ্যমে যোগ করা ইনভ্যালিডেশন কলব্যাক এখন অটোমেটিক ট্রিগার হয় যদি সেগুলি এমন PagingSource / DataSource-এ রেজিস্টার করা থাকে যা আগে থেকেই ইনভ্যালিড। এটি রেস কন্ডিশন সংক্রান্ত সমস্যার সমাধান করে যার ফলে পেজিং ইনভ্যালিডেশন সিগন্যাল ড্রপ করে এবং প্রাথমিক লোডের সময় আগে থেকেই ইনভ্যালিড সোর্স প্রদান করা হলে আটকে যায়। এছাড়াও, ইনভ্যালিডেট কলব্যাক ট্রিগার হওয়ার পরে এখন সঠিকভাবে সরিয়ে দেওয়া হয় কারণ এগুলি সর্বাধিক একবার কল করার গ্যারান্টি দেওয়া হয়। (I27e69)
  • নতুন ইনস্ট্যান্টিয়েটেড PagedList স্ট্রিম, যেমন LivePagedListBuilder বা RxPagedListBuilder থেকে প্লেসহোল্ডার প্রাথমিক ভ্যালু (InitialPagedList) জমা দিলে, আগে লোড করা ডেটা আর মুছে যাবে না।

ভার্সন 3.1.0-alpha02

১ জুলাই, ২০২১

androidx.paging:paging-*:3.1.0-alpha02 রিলিজ করা হয়েছে। ভার্সন 3.1.0-alpha02-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • onPagesPresented লিসেনার ও ফ্লো প্রেজেন্টার API যোগ করা হয়েছে যা UI-তে প্রেজেন্ট করা পৃষ্ঠা আপডেট হওয়ার সাথে সাথেই ট্রিগার হয়।

    এইসব আপডেট UI-এর সাথে সিঙ্ক করা হয় বলে, আপডেট প্রয়োগ করার পরে স্ট্যাটাস চেক করতে আপনি .snapshot, .getItemCount-এর মতো অ্যাডাপ্টার মেথড কল করতে পারেন। মনে রাখবেন যে .snapshot() স্পষ্টভাবে কল করার জন্য বাকি ছিল কারণ প্রতিটি আপডেটে এটি করা ব্যয়বহুল হতে পারে।

    নিম্নলিখিত পরিস্থিতিতে পৃষ্ঠা আপডেট করা হতে পারে:

    • নতুন জেনারেশনের PagingData-এর প্রাথমিক লোড সম্পূর্ণ হয়, নতুন জেনারেশনে উপস্থাপিত আইটেমে কোনও পরিবর্তন থাকুক বা না থাকুক। অর্থাৎ, নতুন জেনারেশন প্রাথমিক লোড সম্পূর্ণ করছে কোনও আপডেট ছাড়াই কারণ তালিকাটি ঠিক একই রকম থাকবে এই কলব্যাক ট্রিগার করুন।
    • একটি পৃষ্ঠা যোগ করা হয়েছে, যদিও যোগ করা পৃষ্ঠায় কোনও নতুন আইটেম নেই
    • কোনও পৃষ্ঠা বাদ দেওয়া হয়েছে, এমনকি বাদ দেওয়া পৃষ্ঠাটি খালি থাকলেও (I272c9, b/189999634)

সমস্যার সমাধান

  • LivePagedList বা RxPagedList-এর মাধ্যমে তৈরি করা প্রাথমিক ভ্যালু থেকে PagedList.dataSource অ্যাক্সেস করলে, IllegalStateException (I96707) আর ভুল করে থ্রো করা হবে না

ভার্সন 3.1.0-alpha01

২ জুন, ২০২১

androidx.paging:paging-*:3.1.0-alpha01 রিলিজ করা হয়েছে। ভার্সন 3.1.0-alpha01-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • paging-rxjava3-এর প্রদান করা ক্লাস এখন androidx.paging.rxjava3 প্যাকেজের অধীনে থাকে যাতে সেগুলি paging-rxjava2-এর সাথে কনফ্লিক্ট না করে (Ifa7f6)

সমস্যার সমাধান

  • পেজিং কখনও কখনও RecyclerView-তে নো-অপ ডিফার ইভেন্ট পাঠাত, যার ফলে নির্দিষ্ট কিছু লিসেনার তাড়াতাড়ি ট্রিগার হতে পারত। এই সমস্যার সমাধান করা হয়েছে। (Ic507f, b/182510751)

এক্সটার্নাল কন্ট্রিবিউশন

  • rxjava3 আর্টিফ্যাক্টে অবচিত PagedList compat API যোগ করা হয়েছে (Id1ce2, b/182497591)

Paging Compose ভার্সন 1.0.0

ভার্সন 1.0.0-alpha20

২৪ মে, ২০২৩

androidx.paging:paging-compose:1.0.0-alpha20 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha20-এ এইসব কমিট আছে।

নতুন ফিচার

  • Paging Compose এখন PagingData.from(fakeData) তৈরি করে এবং PagingData-কে MutableStateFlow-এ (যেমন, MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) র‍্যাপ করে ফেক ডেটার তালিকা প্রিভিউ করার সুবিধা দেয়। আপনার @Preview-এ ইনপুট হিসেবে সেই ডেটা ব্যবহার করে, collectAsLazyPagingItems()-এ কল করলে প্রিভিউ করা যায় এমন LazyPagingItems প্রদান করবে। (I8a78d, b/194544557)

সমস্যার সমাধান

  • pager.flow.cachedIn থেকে ক্যাশে করা ডেটা যা LazyPagingItems-এ সংগ্রহ করা হয়েছে তা এখন অ্যাসিঙ্ক্রোনাস সংগ্রহের প্রয়োজন ছাড়াই স্টেট রিস্টোরেশনের পরে অবিলম্বে উপলভ্য হবে। এর অর্থ হল, স্ট্যাটাস রিস্টোর করার পরে প্রাথমিক কম্পোজিশনের সাথে সাথেই ক্যাশে করা ডেটা প্রেজেন্টেশনের জন্য প্রস্তুত হয়ে যাবে। (I97a60, b/177245496)

Version 1.0.0-alpha19

৩ মে, ২০২৩

androidx.paging:paging-compose:1.0.0-alpha19 রিলিজ করা হয়েছে। 1.0.0-alpha19 ভার্সনে এইসব কমিট আছে।

সব লেজি লেআউট কাজ করে

আগে, পেজিং কম্পোজ LazyListScope-এ কাস্টম items ও itemsIndexed এক্সটেনশন প্রদান করত, যার অর্থ হল আপনি LazyVerticalGrid, HorizontalPager বা Wear ও TV লাইব্রেরি দ্বারা প্রদান করা অন্যান্য কাস্টম লেজি কম্পোনেন্টের মতো অন্যান্য লেজি লেআউটের সাথে পেজিং কম্পোজ ব্যবহার করতে পারবেন না। এই রিলিজের প্রাথমিক আপডেট হল এই অনমনীয়তার সমাধান করা।

আরও বেশি লেজি লেআউট সাপোর্ট করার জন্য, আমাদের আলাদা লেয়ারে API তৈরি করতে হয়েছে - প্রতিটি লেজি লেআউটের জন্য কাস্টম items API দেওয়ার পরিবর্তে, পেজিং কম্পোজ এখন itemKey ও itemContentType-এ LazyPagingItems-এর উপর সামান্য কম লেভেলের এক্সটেনশন পদ্ধতি প্রদান করে। এইসব API-এর মূল লক্ষ্য হল, LazyColumn, LazyVerticalGrid-এর জন্য আগে থেকেই উপলভ্য স্ট্যান্ডার্ড items API-তে key ও contentType প্যারামিটার প্রয়োগ করতে আপনাকে সাহায্য করা। এর পাশাপাশি, HorizontalPager-এর মতো API-তে সমতুল্য প্যারামিটার প্রয়োগ করতেও সাহায্য করা হয়। (Ifa13b, Ib04f0, b/259385813)

এর অর্থ হল, LazyVerticalGrid-কে সাপোর্ট করার অর্থ হল:

// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()

LazyVerticalGrid(columns = GridCells.Fixed(2)) {
  // Here we use the standard items API
  items(
    count = lazyPagingItems.itemCount,
    // Here we use the new itemKey extension on LazyPagingItems to
    // handle placeholders automatically, ensuring you only need to provide
    // keys for real items
    key = lazyPagingItems.itemKey { it.uniqueId },
    // Similarly, itemContentType lets you set a custom content type for each item
    contentType = lazyPagingItems.itemContentType { "contentType" }
  ) { index ->
    // As the standard items call provides only the index, we get the item
    // directly from our lazyPagingItems
    val item = lazyPagingItems[index]
    PagingItem(item = item)
  }
}

এইসব নতুন API ব্যবহার করার আরও উদাহরণের জন্য, আমাদের স্যাম্পেল দেখুন।

এই পরিবর্তনগুলি LazyColumn এবং LazyRow উদাহরণগুলিকে কয়েক লাইন দীর্ঘ করে তুললেও, আমরা অনুভব করেছি যে সমস্ত লেজি লেআউট জুড়ে ধারাবাহিকতা বজায় রাখা পেজিং কম্পোজ ব্যবহারকারীদের জন্য একটি গুরুত্বপূর্ণ বিষয়। সেই কারণে, LazyListScope-এর বর্তমান এক্সটেনশন এখন বন্ধ করে দেওয়া হয়েছে। (I0c459, I92c8f, b/276989796)

API-তে পরিবর্তন

  • নতুন API-তে মাইগ্রেশন সহজ করতে, LazyListScope-এ items ও itemsIndexed এক্সটেনশন ফাংশন এখন contentType প্যারামিটার ব্যবহার করতে পারে, যা নতুন API-তে কাজ করে। (Ib1918, b/255283378)

নির্ভরতা সংক্রান্ত আপডেট

  • পেজিং কম্পোজ, কম্পোজ ১.০.৫ থেকে কম্পোজ ১.২.১-এ এর ডিপেন্ডেন্সি আপডেট করেছে। (Ib1918, b/255283378)

Version 1.0.0-alpha18

৮ ফেব্রুয়ারি, ২০২৩

androidx.paging:paging-compose:1.0.0-alpha18 কোনও পরিবর্তন ছাড়াই রিলিজ করা হয়েছে। 1.0.0-alpha18 ভার্সনে এইসব কমিট রয়েছে।

Version 1.0.0-alpha17

২৪ অক্টোবর, ২০২২

androidx.paging:paging-compose:1.0.0-alpha17 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha17-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • CoroutineContext কল করার সময় collectLazyPagingItems কাস্টমাইজ করার সুবিধা যোগ করুন। (I7a574, b/243182795, b/233783862)

ভার্সন 1.0.0-alpha16

১০ আগস্ট, ২০২২

androidx.paging:paging-compose:1.0.0-alpha16 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha16-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • PagingData থেকে সংগ্রহ করা ডিবাগিং তথ্য প্রকাশ করার জন্য পেজিং এখন LazyPagingItems ক্লাসের মাধ্যমে লগ প্রদান করে।
  • adb shell কমান্ড adb shell setprop log.tag.Paging [DEBUG|VERBOSE]-এর মাধ্যমে লগ চালু করা যেতে পারে। ([b/235527159}(https://issuetracker.google.com/issues/235527159))

সমস্যার সমাধান

  • paging-common:3.1.1 বা তার আগের ভার্সনের সাথে paging-compose:1.0.0-alpha15 ব্যবহার করার সময় PagingDataDiffer কনস্ট্রাক্টর সংক্রান্ত সমস্যার সমাধান করা হয়েছে।(b/235256201,b/239868768)

Version 1.0.0-alpha15

১ জুন, ২০২২

androidx.paging:paging-compose:1.0.0-alpha15 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha15-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • PagingDataAdapter ও AsyncPagingDataDiffer-এর জন্য কনস্ট্রাক্টর যোগ করা হয়েছে, যা CoroutineDispatcher-এর পরিবর্তে CoroutineContext গ্রহণ করে। (Idc878)

সমস্যার সমাধান

  • LazyPagingItems এখন প্রাথমিক loadState সেট করে যাতে LoadState.Loading রিফ্রেশ করা যায়। (I55043, b/224855902)

ভার্সন 1.0.0-alpha14

১৩ অক্টোবর, ২০২১

androidx.paging:paging-compose:1.0.0-alpha14 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha14-এ এইসব কমিট রয়েছে।

Version 1.0.0-alpha13

২৯ সেপ্টেম্বর, ২০২১

androidx.paging:paging-compose:1.0.0-alpha13 রিলিজ করা হয়েছে। 1.0.0-alpha13 ভার্সনে এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • LazyPagingItems.snapshot() ফাংশন পরিবর্তন করে LazyPagingItems.itemSnapshotList প্রপার্টি করা হয়েছে (Ie2da8)
  • বন্ধ করে দেওয়া LazyPagingItems.getAsState() সরিয়ে দেওয়া হয়েছে (Ie65e4)

ভার্সন 1.0.0-alpha12

২১ জুলাই, ২০২১

androidx.paging:paging-compose:1.0.0-alpha12 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha12-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • items(lazyPagingItems) এবং itemsIndexed(lazyPagingItems) যা LazyColumn/Row-এর সাথে পেজিং কানেক্ট করতে ব্যবহার করা হয়, এখন বিকল্প কী প্যারাম গ্রহণ করে যা আপনাকে আইটেমটি উপস্থাপন করে এমন একটি স্টেবল কী নির্দিষ্ট করতে দেয়। আপনি এখান থেকে কী সম্পর্কে আরও পড়তে পারবেন। (I7986d)
  • lazyPagingItems.getAsState(index) ফাংশন এখন বন্ধ করে দেওয়া হয়েছে। পরিবর্তে lazyPagingItems[index] ব্যবহার করুন। (I086cb, b/187339372)

Version 1.0.0-alpha11

৩০ জুন, ২০২১

androidx.paging:paging-compose:1.0.0-alpha11 রিলিজ করা হয়েছে। 1.0.0-alpha11 ভার্সনে এই কমিটগুলি রয়েছে।

ভার্সন 1.0.0-alpha10

২ জুন, ২০২১

androidx.paging:paging-compose:1.0.0-alpha10 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha10-এ এইসব কমিট রয়েছে।

ভার্সন 1.0.0-alpha09

১৮ মে, ২০২১

androidx.paging:paging-compose:1.0.0-alpha09 রিলিজ করা হয়েছে। 1.0.0-alpha09 ভার্সনে এই কমিটগুলি রয়েছে।

সমস্যার সমাধান

  • LazyPagingItems-এর itemCount এবং আইটেম গেটার এখন পর্যবেক্ষণযোগ্য যা এটিকে LazyVerticalGrid-এর সাথেও ব্যবহার করার অনুমতি দেয় (Ie2446, b/171872064, b/168285687)

কম্পোজ করা সংক্রান্ত মানানসই

  • androidx.paging:paging-compose:1.0.0-alpha09 শুধুমাত্র Compose ভার্সন 1.0.0-beta07 ও তার পরবর্তী ভার্সনের সাথে মানানসই।

ভার্সন 1.0.0-alpha08

২৪ ফেব্রুয়ারি, ২০২১

androidx.paging:paging-compose:1.0.0-alpha08 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha08-এ এইসব কমিট রয়েছে।

Compose 1.0.0-beta01-এর সাথে ইন্টিগ্রেট করার জন্য আপডেট করা হয়েছে।

Version 1.0.0-alpha07

১০ ফেব্রুয়ারি, ২০২১

androidx.paging:paging-compose:1.0.0-alpha07 রিলিজ করা হয়েছে। 1.0.0-alpha07 ভার্সনে এইসব কমিট আছে।

Compose alpha12-এর সাথে ইন্টিগ্রেট করার জন্য আপডেট করা হয়েছে।

ভার্সন 1.0.0-alpha06

২৮ জানুয়ারি, ২০২১

androidx.paging:paging-compose:1.0.0-alpha06 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha06-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

Compose 1.0.0-alpha11-এর উপর নির্ভর করে আপডেট করা হয়েছে।

Version 1.0.0-alpha05

১৩ জানুয়ারি, ২০২১

androidx.paging:paging-compose:1.0.0-alpha05 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha05-এ এইসব কমিট রয়েছে।

Compose 1.0.0-alpha10-এর উপর নির্ভর করার জন্য আপডেট করা হয়েছে।

Version 1.0.0-alpha04

১৬ ডিসেম্বর, ২০২০

androidx.paging:paging-compose:1.0.0-alpha04 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha04-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • সুবিধাজনক প্রপার্টি আপডেট করা হয়েছে, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append শুধুমাত্র Loading থেকে NotLoading-এ ট্রানজিশন করতে মিডিয়েটর ও সোর্স লোড স্টেট, দুটিই NotLoading হওয়ার পরে যাতে রিমোট আপডেট প্রয়োগ করা হয়েছে তা নিশ্চিত করা যায়। (I65619)

ভার্সন 1.0.0-alpha03

২ ডিসেম্বর, ২০২০

androidx.paging:paging-compose:1.0.0-alpha03 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha03-এ এইসব কমিট রয়েছে।

  • Compose 1.0.0-alpha08-এর সাথে ম্যাচ করার জন্য আপডেট করা হয়েছে।

ভার্সন 1.0.0-alpha02

১১ নভেম্বর ২০২০

androidx.paging:paging-compose:1.0.0-alpha02 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha02-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • LazyPagingItem-এ .peek(), .snapshot(), .retry() ও .refresh() পদ্ধতি যোগ করা হয়েছে, যা AsyncPagingDataDiffer / PagingDataAdapter-এ (Iddfe8, b/172041660) উপলভ্য একই কার্যকারিতা প্রকাশ করে

Version 1.0.0-alpha01

২৮ অক্টোবর, ২০২০

androidx.paging:paging-compose:1.0.0-alpha01 রিলিজ করা হয়েছে। ভার্সন 1.0.0-alpha01-এ এইসব কমিট রয়েছে।

নতুন ফিচার

paging-compose আর্টিফ্যাক্ট পেজিং লাইব্রেরি ও Jetpack Compose-এর মধ্যে ইন্টিগ্রেশন প্রদান করে। ব্যবহারের একটি সহজ উদাহরণ:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

ভার্সন 3.0.1

ভার্সন 3.0.1

২১ জুলাই, ২০২১

androidx.paging:paging-*:3.0.1 রিলিজ করা হয়েছে। ভার্সন 3.0.1-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • LivePagedList বা RxPagedList-এর মাধ্যমে তৈরি করা প্রাথমিক ভ্যালু থেকে PagedList.dataSource অ্যাক্সেস করার সময় আর ভুল করে IllegalStateException (I96707) দেখাবে না

ভার্সন 3.0.0

ভার্সন 3.0.0

৫ মে, ২০২১

androidx.paging:paging-*:3.0.0 রিলিজ করা হয়েছে। ভার্সন 3.0.0-এ এইসব কমিট আছে।

3.0.0-এর প্রধান ফিচার

Paging 2.x.x-এর বেশিরভাগ API-এর ব্যবহার বন্ধ করে দেওয়া হয়েছে এবং তার পরিবর্তে নতুন Paging 3 API ব্যবহার করা হচ্ছে যাতে নিম্নলিখিত উন্নতি করা যায়:

  • Kotlin coroutines ও Flow-এর জন্য ফার্স্ট-ক্লাস সহায়তা
  • বাতিল করার ব্যাপারে সহায়তা
  • বিল্ট-ইন লোড স্টেট ও সমস্যা সংক্রান্ত সিগন্যাল
  • আবার চেষ্টা করুন + রিফ্রেশ করার কার্যকারিতা
  • তিনটি DataSource সাবক্লাসকে একত্রিত করে একটি PagingSource ক্লাস তৈরি করা হয়েছে
  • বিভাজক যোগ করার জন্য বিল্ট-ইন সহ কাস্টম পৃষ্ঠা ট্রান্সফর্মেশন
  • হেডার ও ফুটার লোড করার স্টেট

ভার্সন 3.0.0-rc01

২১ এপ্রিল, ২০২১

androidx.paging:paging-*:3.0.0-rc01 রিলিজ করা হয়েছে। ভার্সন 3.0.0-rc01-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • Paging কখনও কখনও RecyclerView-এ no-op differ ইভেন্ট পাঠাত, যার ফলে নির্দিষ্ট কিছু লিসনার আগেভাগে ট্রিগার হয়ে যেত, এই সমস্যাটি সমাধান করা হয়েছে। (Ic507f, b/182510751)

ভার্সন 3.0.0-beta03

২৪ মার্চ, ২০২১

androidx.paging:paging-*:3.0.0-beta03 রিলিজ করা হয়েছে। ভার্সন 3.0.0-beta03-এ এইসব কমিট আছে।

সমস্যার সমাধান

  • RecyclerView-তে অপ্রত্যাশিত জাম্পিং আটকাতে, তালিকা আবার লোড করার সময় প্লেসহোল্ডার কীভাবে ম্যানেজ করা হয় তা আমরা নতুন করে সাজিয়েছি। আরও বিবরণের জন্য NullPaddedDiffing.md দেখুন। (If1490, b/170027529, b/177338149)
  • .build() কল করা হলে, বিভিন্ন PagedList বিল্ডার (পুরনো কম্প্যাটিবিলিটি পাথ) আর ভুলভাবে সিঙ্ক্রোনাস পদ্ধতিতে Main থ্রেডে DataSource.Factory.create() কল করে না। (b/182798948)

ভার্সন 3.0.0-beta02

১০ মার্চ, ২০২১

androidx.paging:paging-*:3.0.0-beta02 রিলিজ করা হয়েছে। ভার্সন 3.0.0-beta02-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • Rx3 এক্সটেনশন এখন সঠিকভাবে @ExperimentalCoroutinesApi অপ্ট-ইন করার প্রয়োজনীয়তা প্রচার করে। আগে সেগুলি @get পদ্ধতিতে চিহ্নিত করা হত, যা Kotlin Compiler উপেক্ষা করে, কারণ: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

সমস্যার সমাধান

  • এক্সপেরিমেন্টাল API-এর পাবলিক ব্যবহারের উপর বিধিনিষেধ আরোপ করুন (I6aa29, b/174531520)
  • রিমোট রিফ্রেশ কল করা হলে, PagingState সবসময় null হওয়ার কারণ সম্পর্কিত সমস্যার সমাধান করা হয়েছে।
  • PagingSource-এর মাধ্যমে খালি পৃষ্ঠা রিটার্ন করা হলে, prefetchDistance পূরণ করার জন্য Paging আবার ডেটা ফেচ করতে পারে না, এর ফলে Paging "আটকে" যায়, এই সমস্যার সমাধান করা হয়েছে।

ভার্সন 3.0.0-beta01

১০ ফেব্রুয়ারি, ২০২১

androidx.paging:paging-*:3.0.0-beta01 রিলিজ করা হয়েছে। ভার্সন 3.0.0-beta01-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • Rx2 এবং Rx3 র‍্যাপার এখন এক্সপেরিমেন্টাল অ্যানোটেশন প্রকাশ করে যা নির্ভর করে। আপনি paging-rxjava2 বা paging-rxjava3-তে Rx কম্প্যাট র‍্যাপার ব্যবহার করলে, আপনাকে এখন @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d) ব্যবহার করে অ্যানোটেট করতে হবে

সমস্যার সমাধান

  • কম্প্যাটিবিলিটি পাথের মাধ্যমে v2 DataSource API ব্যবহার করার সময় IndexOutOfBoundsException: Inconsistency detected কখনও কখনও থ্রো করা হয়, তা সমাধান করা হয়েছে
  • কম্প্যাটিবিলিটি পাথের মাধ্যমে ব্যবহার করা হলে, DataSource-এর ইনিশিয়ালাইজেশনের সময় isInvalid কল এখন মূল থ্রেডের পরিবর্তে fetchDispatcher-এ সঠিকভাবে লঞ্চ করা হয়। এটি Room-এর PagingSource ইমপ্লিমেন্টেশন ব্যবহার করার সময় প্রধান থ্রেডে Db অ্যাক্সেসের কারণে হওয়া IllegalStateException সমস্যার সমাধান করে।

Version 3.0.0-alpha13

২৭ জানুয়ারি, ২০২১

androidx.paging:paging-*:3.0.0-alpha13 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha13-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • PagingSource.getRefreshKey প্রয়োগ করা আর ঐচ্ছিক নয়, এটি এখন ডিফল্ট প্রয়োগ ছাড়াই একটি অ্যাবস্ট্রাক্ট ফাংশন। মাইগ্রেট করা ব্যবহারকারীরা হয় ডিফল্ট ইমপ্লিমেন্টেশন রিটার্ন করা চালিয়ে যেতে পারেন, যা শুধু null রিটার্ন করে, কিন্তু getRefreshKey()-এর বাস্তবিক ইমপ্লিমেন্টেশন থাকা উচিত যা ব্যবহারকারীর বর্তমান স্ক্রল পজিশনের উপর ভিত্তি করে একটি কী রিটার্ন করে যা PagingState.anchorPosition-এর মাধ্যমে ভিউপোর্টের আশেপাশে কেন্দ্র করে লোড করা চালিয়ে যেতে দেয়, যদি সম্ভব হয়। (I4339a)
  • InvalidatingPagingSourceFactory এখন একটি ফাইনাল ক্লাস (Ia3b0a)
  • অতিরিক্ত ঐচ্ছিক SeparatorType প্যারামিটার সহ টার্মিনাল সেপারেটর (হেডার / ফুটার) ব্যবহার কনফিগার করার অনুমতি দিন। দুটি বিকল্প হল:
    • FULLY_COMPLETE - আগে থেকে থাকা আচরণ; PagingSource এবং RemoteMediator, দু'টিকেই endOfPaginationReached হিসেবে চিহ্নিত করার জন্য অপেক্ষা করুন, তারপরই টার্মিনাল সেপারেটর যোগ করুন। RemoteMediator ব্যবহার না করা হলে, রিমোট loadState উপেক্ষা করা হয়। এটি মূলত তখনই উপযোগী যখন আপনি শুধুমাত্র বিভাগ দেখাতে চান বিভাগটি সম্পূর্ণরূপে লোড হয়ে গেলে বিভাজক, রিমোট সোর্স থেকে আনা সহ যেমন, নেটওয়ার্ক।
    • SOURCE_COMPLETE - RemoteMediator ব্যবহার করা হলেও, endOfPaginationReached চিহ্নিত করার জন্য শুধুমাত্র PagingSource-এর জন্য অপেক্ষা করুন। এর ফলে প্রাথমিক লোডের সাথে হেডার ও ফুটার সিঙ্ক্রোনাইজ করে দেখানো যায়, যার ফলে ব্যবহারকারীকে টার্মিনাল সেপারেটর দেখার জন্য স্ক্রল করতে হয় না। (Ibe993, b/174700218)

সমস্যার সমাধান

  • বিরল মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা হয়েছে। PageFetcher, PagingSource থেকে লোড করা শুরু করার আগেই সেটি ইনভ্যালিডেট হয়ে গেলে এই সমস্যা হয়। (I9606b, b/174625633)

ভার্সন 3.0.0-alpha12

১৩ জানুয়ারি, ২০২১

androidx.paging:paging-*:3.0.0-alpha12 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha12-এ এইসব কমিট আছে।

API-তে পরিবর্তন

  • InvalidatingPagingSourceFactory আর অ্যাবস্ট্রাক্ট ক্লাস নয় কারণ এতে কখনও কোনও অ্যাবস্ট্রাক্ট পদ্ধতি ছিল না। (I4a8c4)
  • Java ব্যবহারকারীদের জন্য Lifecycle বা CoroutineScope-এর পরিবর্তে ViewModel গ্রহণ করে এমন .cachedIn()-এর একটি ওভারলোড যোগ করা হয়েছে। (I97d81, b/175332619)
  • জাভা কলারদের অ্যাসিঙ্ক পদ্ধতিতে PagingData ট্রান্সফর্ম অপারেশন ব্যবহার করার অনুমতি দেয়। এর জন্য ট্রান্সফর্ম অপারেটরের আর্গুমেন্টে Executor গ্রহণ করা হয়। এখন সব -Sync ট্রান্সফর্ম অপারেটর থেকে -Sync সাফিক্স সরিয়ে দেওয়া হয়েছে এবং Kotlin Coroutine ব্যবহারকারীদের এক্সটেনশন ফাংশন কল করে অস্পষ্টতা দূর করতে হবে যা সাসপেন্ডিং ব্লক গ্রহণ করে। সব PagingData ট্রান্সফর্মেশন অপারেটরকে এক্সটেনশনে স্ট্যাটিক PagingDataTransforms ক্লাসের অধীনে সরানো হয়েছে। Java ব্যবহারকারীদের স্ট্যাটিক হেল্পারের মাধ্যমে কল করতে হবে, যেমন, PagingDataTransforms.map(pagingData, transform) Kotlin ব্যবহারকারীদের জন্য সিনট্যাক্স একই, তবে আপনাকে ফাংশন ইমপোর্ট করতে হবে। (If6885, b/172895919)

সমস্যার সমাধান

  • প্যাজিনেশনের শেষ প্রান্তে আগেই পৌঁছে গেলে, adapter.refresh() চলাকালীন RemoteMediator.load() কল করা যাবে না, এমন একটি সমস্যার সমাধান করা হয়েছে।

ভার্সন 3.0.0-alpha11

১৬ ডিসেম্বর, ২০২০

androidx.paging:paging-*:3.0.0-alpha11 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha11-এ এইসব কমিট রয়েছে।

নতুন ফিচার

  • নিম্নলিখিত প্রাথমিক ব্যবহারের ক্ষেত্রে সেভ করা স্টেট সাপোর্ট যোগ করা হয়েছে (সম্পূর্ণ সাপোর্ট, বিশেষ করে লেয়ার্ড সোর্স কেসের ক্ষেত্রে এখনও কাজ চলছে):
    • ফ্লো ক্যাশে করা হয়েছে এবং অ্যাপ্লিকেশন বন্ধ করা হয়নি (যেমন, ফ্লো একটি ভিউ মডেলে ক্যাশে করা হয়েছে এবং প্রসেসে অ্যাক্টিভিটি আবার তৈরি করা হয়েছে)
    • পেজিং সোর্স গণনা করা হয়, প্লেসহোল্ডার চালু করা থাকে এবং লেআউট স্ট্যাগার করা থাকে না।

API-তে পরিবর্তন

  • PagingSource.getRefreshKey() এখন স্থিতিশীল API (I22f6f, b/173530980)
  • PagingSource.invalidate আর ওপেন ফাংশন নয়। ইনভ্যালিডেশন হলে আপনি বিজ্ঞপ্তি পেতে চাইলে, ইনভ্যালিডেট ওভাররাইড করার পরিবর্তে registerInvalidatedCallback পদ্ধতি কল করার কথা বিবেচনা করুন। (I628d9, b/173029013, b/137971356)
  • Pager-এ এখন একটি পরীক্ষামূলক কনস্ট্রাক্টর আছে, এর পাশাপাশি সাধারণ কনস্ট্রাক্টরও আছে। এর ফলে, অপ্ট-ইন অ্যানোটেশনের মাধ্যমে পরীক্ষামূলক API অপরীক্ষামূলক পাবলিক API-তে লিক হয়ে যায় না। (I9dc61, b/174531520)
  • সুবিধাজনক প্রপার্টি আপডেট করা হয়েছে, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append শুধুমাত্র Loading থেকে NotLoading-এ ট্রানজিশন করতে মিডিয়েটর ও সোর্স লোড স্টেট, দুটিই NotLoading হওয়ার পরে যাতে রিমোট আপডেট প্রয়োগ করা হয়েছে তা নিশ্চিত করা যায়। (I65619)
  • LoadParams.pageSize সরিয়ে দেওয়া হয়েছে (এটি আগেই সচল ছিল না)। আপনার PagingSource-এ LoadParams.loadSize ব্যবহার করার সাজেশন দেওয়া হচ্ছে।

    LoadParams.loadSize সবসময় PagingConfig.pageSize-এর সমান হয়, তবে প্রাথমিক লোড কলের ক্ষেত্রে এটি PagingConfig.initialLoadSize-এর সমান হয়।

    আপনি যদি Pager বা PagedList ব্যবহার না করে আপনার Paging2 DataSource পরীক্ষা করেন, তাহলে pageSize PagingConfig.pageSize-এর সাথে নাও মিলতে পারে যদি আপনি initialLoadSize-ও সেট করেন। আপনার টেস্টের জন্য এটি গুরুত্বপূর্ণ হলে, এর পরিবর্তে Pager/PagedList ব্যবহার করে দেখুন যা ইন্টার্নালি আপনার DataSource লোড পদ্ধতির জন্য সঠিক PageSize সেট করবে। (I98ac7, b/149157296)

সমস্যার সমাধান

  • PagingConfig.maxSize সেট করা অবস্থায় সেপারেটর ব্যবহার করার সময় IllegalStateException-এর কারণে হওয়া ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা হয়েছে। (I0ed33, b/174787528)
  • RemoteMediator সেট করা থাকলে (I8cf5a) প্রাথমিক লোডিংয়ের পরে PREPEND / APPEND-এর লোড স্টেট NotLoading(endOfPaginationReached = true)অবিলম্বে আপডেট না হওয়া সংক্রান্ত সমস্যার সমাধান করা হয়েছে
  • একটি সমস্যার সমাধান করা হয়েছে যেখানে .snapshot(), .peek() ইত্যাদির মতো প্রেজেন্টার-সাইড API, ListUpdateCallback আপডেটের মধ্যে আগের (পুরনো) তালিকা ফিরিয়ে দিত।
  • Separators অপারেটর RemoteMediator-এর সাথে ব্যবহার করার সময় হেডার বা ফুটার যোগ না হওয়ার সমস্যা সমাধান করা হয়েছে
  • LoadState আপডেট করার সময় RemoteMediator-এর জন্য NotLoading, Loading স্টেটে আটকে যাওয়া সংক্রান্ত সমস্যার সমাধান করা হয়েছে
  • Paging2.0 কম্প্যাটিবিলিটি API, .asPagingSourceFactory(), ভুল CoroutineDispatcher-এ ব্যাকিং DataSource শুরু করার কারণ হতে পারে এমন একটি সমস্যার সমাধান করা হয়েছে। এটি ক্র্যাশ এবং সম্ভাব্য ANR কেস সমাধান করে, বিশেষ করে যখন রুমের বর্তমান PagingSource-এর ইমপ্লিমেন্টেশন ব্যবহার করা হয়, যা এই কম্প্যাটিবিলিটি পাথ ব্যবহার করে।

ভার্সন 3.0.0-alpha10

২ ডিসেম্বর, ২০২০

androidx.paging:paging-*:3.0.0-alpha10 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha10-এ এইসব কমিট আছে।

API-তে পরিবর্তন

  • বন্ধ করে দেওয়া dataRefreshFlow এবং dataRefreshListener API সরিয়ে দেওয়া হয়েছে কারণ loadStateFlow / Listener আপডেটের সাথে এগুলি অপ্রয়োজনীয়। যারা মাইগ্রেট করছেন, তাদের জন্য loadStateFlow-এর সমতুল্য হল:

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908)

সমস্যার সমাধান

  • RemoteMediator REFRESH-এর জন্য endOfPaginationReached এখন LoadState আপডেটে সঠিকভাবে প্রোপাগেট করে এবং রিমোট APPEND ও PREPEND ট্রিগার হওয়া থেকে আটকায়। (I94a3f, b/155290248)
  • প্রাথমিক পৃষ্ঠা খালি থাকা বা ভারী ফিল্টারিংয়ের কারণে খালি তালিকা দেখানো হলে, তা আর পেজিংকে PREPEND বা APPEND লোড শুরু করতে বাধা দেবে না। (I3e702, b/168169730)
  • দ্রুত বাতিল করার ঘটনা ঘটলে, getRefreshKey-এর পরবর্তী জেনারেশনে কল করা হয় না, এমন একটি সমস্যার সমাধান করা হয়েছে। (I45460, b/170027530)

এক্সটার্নাল কন্ট্রিবিউশন

  • একটি নতুন অ্যাবস্ট্রাক্ট ক্লাস InvalidatingPagingSourceFactory যোগ করা হয়েছে যার মধ্যে একটি .invalidate() API আছে যা এটি থেকে নির্গত হওয়া সমস্ত PagingSources-এ ইনভ্যালিডেট ফরওয়ার্ড করে। @claraf3-কে ধন্যবাদ! (Ie71fc, b/160716447)

পরিচিত সমস্যা

  • RemoteMediator b/172254056 ব্যবহার করার সময় .insertSeparators() ট্রান্সফর্ম থেকে হেডার ও ফুটার সাথে সাথে নাও দেখা যেতে পারে
  • RemoteMediator ব্যবহার করলে রিমোট LoadState আটকে যেতে পারে যদি RemoteMediator.load() রিটার্ন করার আগে ইনভ্যালিডেশন এবং PagingSource.load(LoadParams.Refresh(...)) সম্পূর্ণ হয় b/173717820

ভার্সন 3.0.0-alpha09

১১ নভেম্বর ২০২০

androidx.paging:paging-*:3.0.0-alpha09 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha09-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • replaceWith ক্লজের মাধ্যমে dataRefreshFlow / Listener পদ্ধতি সম্পূর্ণভাবে বাতিল করুন। (I6e2dd)

সমস্যার সমাধান

  • RemoteMediator-এর সাথে সেপারেটর ব্যবহার করার সময় IllegalArgumentException থ্রো করা হলে এবং endOfPagination রিটার্ন করার কথা এমন রিমোট লোড এখনও চলছে (I3a260), সেই সময় ইনভ্যালিডেট ট্রিগার করা হলে সেই সমস্যার সমাধান করা

ভার্সন 3.0.0-alpha08

২৮ অক্টোবর, ২০২০

androidx.paging:paging-*:3.0.0-alpha08 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha08-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • DataSource.InvalidatedCallback-এর Kotlin / Java ভেরিয়েন্ট ফাংশনাল ইন্টারফেসের (Kotlin 1.4-এ উপলভ্য) মাধ্যমে Kotlin-এ SAM-কনভার্সন চালু করে একত্রিত করা হয়েছে। এছাড়াও, এটি এমন একটি সমস্যার সমাধান করে যেখানে .map বা .mapByPage-এর মাধ্যমে ট্রান্সফর্ম করার পরে ইনভ্যালিডেট কলব্যাকের কোটলিন ভেরিয়েন্ট কল করা হয়নি। (I1f244, b/165313046)

সমস্যার সমাধান

  • ViewPager-এর সাথে পেজিংয়ের ইন্টার‍্যাকশন অনেক উন্নত করা হয়েছে। বিশেষ করে, পেজ অবৈধ হওয়ার কারণে পেজিং আর RemoteMediator#load কল বাতিল করবে না। এছাড়াও, REFRESH অনুরোধ সফলভাবে সম্পূর্ণ না হওয়া পর্যন্ত, REFRESH করার প্রয়োজন হলে, এটি আর কোনও অ্যাপেন্ড/প্রিপেন্ড লোড অনুরোধ করবে না। (I6390b, b/162252536)
  • MissingGetterMatchingBuilder-এর জন্য API লিন্ট চেক androidx-এর জন্য চালু করা হয়েছে (I4bbea, b/138602561)
  • একটি সমস্যার সমাধান করা হয়েছে যেখানে ব্যাকগ্রাউন্ড থ্রেড থেকে RecyclerView-কে বিজ্ঞপ্তি দেওয়ার কারণে .withLoadState* ConcatAdapter সহায়ক ক্র্যাশ করত (I18bb5, b/170988309)
  • একটি সমস্যা সমাধান করা হয়েছে যেখানে খুব ছোট খালি নয় এমন পৃষ্ঠা লোড করার সময় কখনও কখনও প্রিফেচকে সঠিকভাবে লোড ট্রিগার করা থেকে বিরত রাখে।Iffda3 b/169259468

ভার্সন 3.0.0-alpha07

১ অক্টোবর, ২০২০

androidx.paging:paging-*:3.0.0-alpha07 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha07-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • Async PagingData Guava-ভিত্তিক অপারেটররা এখন এক্সিকিউশন কন্ট্রোল করার জন্য প্যারামিটার হিসেবে Executor গ্রহণ করে। (Id4372)

সমস্যার সমাধান

  • রেস কন্ডিশনের কারণে RemoteMediator-এ IndexOutOfBounds ব্যতিক্রম ঠিক করা হয়েছে। (I00b7f, b/165821814)
  • DataSource -> PagingSource কনভার্সনে রেস কন্ডিশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে, যার ফলে PagingSource, DataSource থেকে আসা ইনভ্যালিডেশন সিগন্যাল উপেক্ষা করতে পারে।
  • পেজ ফেচিং লজিকে একটি সমস্যার সমাধান করা হয়েছে যা কখনও কখনও PagingDataAdapter.refresh() চালু না হওয়া পর্যন্ত PagingSource-এর নতুন জেনারেশন বেছে নিতে ব্যর্থ হয়
  • RemoteMediator-এর সাথে PagingSource-এ (যেমন Room-এর মাধ্যমে তৈরি করা) কনভার্ট করা DataSource ব্যবহার করার সময় স্ক্রল-পজিশন কখনও কখনও হারিয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে

এক্সটার্নাল কন্ট্রিবিউশন

  • PagingData-এর জন্য RxJava2, RxJava3 এবং Guava-ভিত্তিক অ্যাসিঙ্ক ট্রান্সফর্মেশন অপারেটর যোগ করার জন্য @simonschiller-কে ধন্যবাদ!

ভার্সন 3.0.0-alpha06

২ সেপ্টেম্বর, ২০২০

androidx.paging:paging-*:3.0.0-alpha06 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha06-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • UnsupportedOperationException-এর সাথে আরও স্পষ্ট মেসেজ দেখানো হয় যখনই PagingDataAdapter.setHasStableIds কল করা হয়, তখনই স্টেবল আইডির জন্য সহায়তা না থাকার মেসেজ দেখানো হয়। (Ib3890, b/158801427)

সমস্যার সমাধান

  • insertSeparators আর খালি পৃষ্ঠা ফিল্টার করে না, এর ফলে প্রেজেন্টার প্রিফেচ ডিস্ট্যান্স মেনে চলে, এমনকি অনেক খালি পৃষ্ঠা যোগ করা হলেও। (I9cff6, b/162538908)

ভার্সন 3.0.0-alpha05

১৯ আগস্ট, ২০২০

androidx.paging:paging-*:3.0.0-alpha05 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha05-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • প্রেজেন্ট করা ডেটা অনেক বেশি ফিল্টার করা থাকলেও, পেজিং এখন সঠিকভাবে পেজ প্রিফেচ করে
  • আবার চেষ্টা করা লোডে LoadResult.Error ফিরিয়ে দিলে, আইটেম অ্যাক্সেস আর ভুলভাবে আবার চেষ্টা করার ট্রিগার করে না

এক্সটার্নাল কন্ট্রিবিউশন

  • কিছু টেস্ট ক্লিন-আপ করার জন্য Clara F-কে ধন্যবাদ! (549612)

ভার্সন 3.0.0-alpha04

৫ আগস্ট, ২০২০

androidx.paging:paging-*:3.0.0-alpha04 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha04-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • AsyncPagingDataDiffer-এ peek() API যোগ করা হয়েছে এবং PagingDataAdapter-এ ট্রিগার পেজ লোড করা ছাড়াই উপস্থাপিত ডেটা অ্যাক্সেস করার অনুমতি দেওয়া হয়েছে। (I38898, b/159104197)
  • PagingDataAdapter-এ snapshot() API যোগ করা হয়েছে এবং AsyncPagingDataDiffer-এ পৃষ্ঠা ফেচ ট্রিগার না করেই উপস্থিত আইটেম রিট্রিভ করার অনুমতি দেওয়া হয়েছে। (I566b6, b/159104197)
  • স্ট্যাটিক তালিকা দেখানোর অনুমতি দিতে একটি PagingData.from(List<T>) কনস্ট্রাক্টর যোগ করা হয়েছে, যা সামগ্রিক PagingData ফ্লোয়ের সাথে একত্রিত করে নির্দিষ্ট অবস্থায় স্ট্যাটিক তালিকা দেখানো যেতে পারে, যেমন, প্রাথমিক REFRESH সম্পূর্ণ হওয়ার আগে অথবা শুধু ট্রান্সফর্মেশন পরীক্ষা করার জন্য। (Id134d)
  • dataRefresh Flow / Listener API সরিয়ে দিন, কারণ সেগুলি REFRESH-এ উপস্থাপিত আইটেমের স্টেট এক্সপোজ করার উদ্দেশ্যে তৈরি করা হয়েছিল, কিন্তু loadState Flow / Listener কলব্যাক টাইমিং এবং itemCount প্রপার্টিতে উন্নতির ফলে এটি অপ্রয়োজনীয় হয়ে গেছে (Ia19f3)
  • PagingSource এবং RemoteMediator-এর জন্য RxJava3 কম্প্যাটিবিলিটি র‍্যাপার যোগ করা হয়েছে (I49ef3, b/161480176)

সমস্যার সমাধান

  • toPagingSourceFactory হেল্পারের মাধ্যমে PositionalDataSource-কে PagingSource-এ কনভার্ট করা হয়েছে, যার মধ্যে Room-এর মাধ্যমে জেনারেট করা PagingSource অন্তর্ভুক্ত আছে এখন জাম্পিংকে সাপোর্ট করার জন্য নিজেকে সঠিকভাবে চিহ্নিত করে। (I3e84c, b/162161201)
  • submitData-এর সিঙ্ক্রোনাস ভেরিয়েন্ট ব্যবহার করার সময় কখনও কখনও রেস কন্ডিশন তৈরি হওয়ার ফলে ClosedSendChannelException (I4d702, b/160192222) হওয়ার সমস্যা সমাধান করা হয়েছে

এক্সটার্নাল কন্ট্রিবিউশন

  • Slack-এর হয়ে RxJava3 কম্প্যাটিবিলিটি র‍্যাপার যোগ করার জন্য জ্যাক সুইয়ার্সকে ধন্যবাদ! (I49ef3, b/161480176)

ভার্সন 3.0.0-alpha03

২২ জুলাই, ২০২০

androidx.paging:paging-*:3.0.0-alpha03 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha03-এ এইসব কমিট আছে।

API-তে পরিবর্তন

  • PagingState-এর কনস্ট্রাক্টর এখন সর্বজনীন, যা getRefreshKey() (I8bf15) প্রয়োগ করার সময় টেস্টিং আরও সহজ করে তোলে
  • Java থেকে DataSource kotlin ম্যাপ ফাংশন ভেরিয়েন্ট লুকানো হয়েছে, যাতে আসল ও kotlin ভেরিয়েন্টের মধ্যে অস্পষ্টতা দূর করা যায়। (If7b23, b/161150011)
  • Kotlin ব্যবহারকারীদের সুবিধার জন্য তৈরি করা অপ্রয়োজনীয় API-কে @JvmSynthetic (I56ae5) হিসেবে চিহ্নিত করা হয়েছে
  • LoadResult.Page's constructor-এর জন্য ওভারলোড যোগ করা হয়েছে যা itemsBefore ও itemsAfter-কে ডিফল্ট হিসেবে COUNT_UNDEFINED (I47849) সেট করে
  • আগে থেকে থাকা PagingData অপারেটরকে সাসপেন্ডিং পদ্ধতি গ্রহণ করার জন্য তৈরি করা হয়েছে এবং Java ব্যবহারকারীদের জন্য নতুন mapSync, flatMapSync ও filterSync নন-সাসপেন্ডিং অপারেটর নিয়ে আসা হয়েছে। আগেকার ট্রান্সফর্মেশন পদ্ধতিগুলি এক্সটেনশন ফাংশনে সরিয়ে দেওয়া হয়েছে, তাই Kotlin ব্যবহারকারীদের এখন সেগুলি ইমপোর্ট করতে হবে। (I34239, b/159983232)

সমস্যার সমাধান

  • Room (এবং PositionalDataSource) PagingSources এখন প্রথম পৃষ্ঠার অংশ হিসেবে একটি লিডিং সেপারেটর দেখাবে, তাই ব্যবহারকারীকে এটি দেখতে স্ক্রল করতে হবে না। (I6f747, b/160257628)
  • প্লেসহোল্ডারে আইটেম অ্যাক্সেস করা হলে এখন PagingSource লোড সঠিকভাবে ট্রিগার হয় যতক্ষণ না PagingData.filter() (I95625, b/158763195) দ্বারা ট্রান্সফর্ম হওয়ার পরে অনুরোধ করা ইন্ডেক্স পূরণ করে এমন একটি পৃষ্ঠা ফেরত আসে
  • PagingSource কোনও সমস্যা রিটার্ন করার পরে স্ক্রল করলে, PagingDataAdapter.retry() যাতে আবার চেষ্টা করতে পারে, সেই জন্য একটি সমস্যার সমাধান করা হয়েছে। (I1084f, b/160194384)
  • কোনও পৃষ্ঠা ড্রপ করার পরে আইটেম অ্যাক্সেস করার সময়, আইটেম অ্যাক্সেস প্রিফেচডিস্ট্যান্সের (Ie95ae, b/160038730) মধ্যে থাকলেও পৃষ্ঠা লোড না হওয়ার সমস্যা সমাধান করে
  • ড্রপ ইভেন্টের পরে PagingConfig.maxSize সেট করলে আর প্লেসহোল্ডার চালু হয় না (I2be29, b/159667766)

ভার্সন 3.0.0-alpha02

২৪ জুন, ২০২০

androidx.paging:paging-*:3.0.0-alpha02 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha02-এ এইসব কমিট রয়েছে।

API-তে পরিবর্তন

  • সাধারণ ডিফল্ট মান (I39c50, b/158576040) সহ PagingConfig-এর কনস্ট্রাক্টরের জন্য ওভারলোড যোগ করা হয়েছে
  • সাধারণ ডিফল্ট ভ্যালু (Ie91f5) সহ PagingDataAdapter এবং AsyncPagingDataDiffer-এর কনস্ট্রাক্টরের জন্য ওভারলোড যোগ করা হয়েছে
  • অ্যাডাপ্টার API, dataRefreshFlow এবং dataRefreshListener এখন একটি বুলিয়ান পাস করে যা সিগন্যাল দেয় যে PagingData খালি আছে কিনা (I6e37e, b/159054196)
  • RemoteMediator-এর জন্য RxJava এবং Guava API যোগ করা হয়েছে - RxRemoteMediator এবং ListenableFutureRemoteMediator
  • isEmpty() ও firstItemOrNull()-এর (I3b5b6, b/158892717) মতো সাধারণ আইটেম অ্যাক্সেসের জন্য PagingState-এ সহায়ক যোগ করা হয়েছে

সমস্যার সমাধান

  • ভুল PagingSource-এর আকস্মিক পুনঃব্যবহার আটকাতে, Pager এখন ফ্যাক্টরিতে PagingSource-এর পুনঃব্যবহার চেক করে, যা অস্পষ্ট ত্রুটি (I99809, b/158486430) দেখায়
  • RemoteMediator REFRESH থেকে হওয়া ব্যর্থতা আর PagingSource-কে লোড করা থেকে আটকাতে পারবে না (I38b1b, b/158892717)
  • submitData-এর সাসপেন্ড না হওয়া ভার্সন, submitData-এর সাসপেন্ড হওয়া ভার্সনের পরে কল করা হলে, একাধিক PagingData-এ একই সাথে সংগ্রহ করার কারণে আর ক্র্যাশ হয় না। (I26358, b/158048877)
  • "পেজার থেকে দুবার সংগ্রহ করা যাবে না" সংক্রান্ত ব্যতিক্রমী সমস্যা সমাধান করা হয়েছে যা কনফিগারেশন পরিবর্তন করার পরে হতে পারে (I58bcc, b/158784811)

ভার্সন 3.0.0-alpha01

১০ জুন, ২০২০

androidx.paging:paging-*:3.0.0-alpha01 রিলিজ করা হয়েছে। ভার্সন 3.0.0-alpha01-এ এইসব কমিট আছে।

পেজিং লাইব্রেরি 3.0-এ আপডেট করা হয়েছে, যাতে বেশ কিছু প্রধান নতুন ফিচার চালু করা যায়।

3.0-এর নতুন ফিচার

পরিচিত সমস্যা

  • Paging 3 javadocs এখনও উপলভ্য নয়। ইতিমধ্যে, উপরে লিঙ্ক করা গাইড বা Kotlin ডকুমেন্ট ব্যবহার করুন। (b/158614050)

ভার্সন ২.১.২

ভার্সন ২.১.২

১৮ মার্চ, ২০২০

androidx.paging:paging:2.1.2 রিলিজ করা হয়েছে। ভার্সন 2.1.2-এ 2.1.0-এর বিরুদ্ধে এই কমিটগুলি রয়েছে।

সমস্যার সমাধান

  • ইনভ্যালিডেশনের সময় পজিশন কনভার্ট করার সময় বিরল ক্ষেত্রে IndexOutOfBoundsException-এর জন্য সমাধান।

রিলিজ সংক্রান্ত সমস্যা

  • ভুলভাবে কনফিগার করা ব্রাঞ্চ থেকে পেজিং ভার্সন 2.1.1 ভুলভাবে রিলিজ করা হয়েছে, এর ফলে আংশিকভাবে প্রয়োগ করা API এবং ভবিষ্যতে রিলিজ হতে চলা ফাংশনালিটি এক্সপোজ হয়ে গেছে।

  • পেজিং 2.1.2-এ লোড-সেন্টারিং ফিক্স রয়েছে যা মূলত ২.১.১ ভার্সনে রিলিজ করা হয়েছিল, তবে এবার ২.১.০ রিলিজের উপরে সঠিকভাবে চেরি-পিক করা হয়েছে। আপনি বর্তমানে 2.1.1 ভার্সন ব্যবহার করলে, এই রিলিজে আপগ্রেড করার জন্য বিশেষভাবে সাজেস্ট করা হচ্ছে।

ভার্সন ২.১.১

ভার্সন 2.1.1

১৮ ডিসেম্বর, ২০১৯

androidx.paging:paging-*:2.1.1 রিলিজ করা হয়েছে। ভার্সন 2.1.1-এ এইসব কমিট রয়েছে।

সমস্যার সমাধান

  • প্লেসহোল্ডার বন্ধ করা থাকলে, PositionalDataSources থেকে অবিচ্ছিন্ন প্রাথমিক লোড এখন শেষ অ্যাক্সেসের আশেপাশে কেন্দ্রীভূত হয়

ভার্সন 2.1.0

ভার্সন 2.1.0

২৫ জানুয়ারি, ২০১৯

2.1.0-rc01 থেকে কোনও পরিবর্তন না করেই পেজিং 2.1.0 রিলিজ করা হয়েছে।

ভার্সন 2.1.0-rc01

৬ ডিসেম্বর, ২০১৮

2.1.0-beta01 থেকে কোনও পরিবর্তন না করেই পেজিং 2.1.0-rc01 রিলিজ করা হয়েছে।

ভার্সন 2.1.0-beta01

১ নভেম্বর, ২০১৮

2.1.0-alpha01-এর থেকে কোনও পরিবর্তন না করেই পেজিং 2.1.0-beta01 রিলিজ করা হয়েছে।

Version 2.1.0-alpha01

১২ অক্টোবর, ২০১৮

পেজিং 2.1.0-alpha01-এ দুটি বড় সংযোজন রয়েছে - পৃষ্ঠা ড্রপ করা এবং প্রতিটি আর্টিফ্যাক্টের জন্য KTX এক্সটেনশন লাইব্রেরি - পাশাপাশি অন্যান্য API পরিবর্তন এবং বাগফিক্স।

API-তে পরিবর্তন

  • মেমরিতে লোড করা আইটেমের সংখ্যা সীমিত করতে PagedList.Config.Builder.setMaxSize() যোগ করা হয়েছে।
  • PagedList.Config.Builder-এর জন্য Kotlin বিকল্প হিসেবে androidx.paging.Config() যোগ করা হয়েছে
  • PagedList.Builder-এর জন্য Kotlin বিকল্প হিসেবে androidx.paging.PagedList() যোগ করা হয়েছে
  • LivePagedListBuilder-এর Kotlin বিকল্প হিসেবে DataSourceFactory.toLiveData() যোগ করা হয়েছে
  • RxPagedListBuilder-এর জন্য Kotlin বিকল্প হিসেবে DataSourceFactory.toObservable() এবং toFlowable() যোগ করা হয়েছে
  • PagedList সোয়্যাপ করা হলে শোনার জন্য AsyncPagedListDiffer.addPagedListListener() যোগ করা হয়েছে। b/111698609
  • PagedListAdapter.onCurrentListChanged() ভেরিয়েন্ট যোগ করা হয়েছে যা পুরনো ও নতুন তালিকা পাস করে, আগের ভেরিয়েন্ট বাতিল করা হয়েছে।
  • PagedListAdapter/AsyncPagedListDiffer.submitList() ভেরিয়েন্ট যোগ করা হয়েছে যা একটি অতিরিক্ত কলব্যাক নেয় যা ডিফারেন্স করার পরে পেজ করা তালিকা দেখানো হলে/যখন ট্রিগার হয়। এটি আপনাকে অন্যান্য UI আপডেটের সাথে PagedList অদল-বদল সিঙ্ক্রোনাইজ করতে দেয়। b/73781068
  • মেমরিতে কতগুলি আইটেম আছে তা আপনাকে জানাতে PagedList.getLoadedCount() যোগ করা হয়েছে। মনে রাখবেন, প্লেসহোল্ডার বন্ধ করা থাকলে রিটার্ন ভ্যালু সবসময় .size()-এর সমান হয়।

সমস্যার সমাধান

  • তালিকা আবার ব্যবহার করা হলে, ডিফারেন্সিয়েট করার সময় রেস কন্ডিশন সংক্রান্ত সমস্যার সমাধান করা হয়েছে b/111591017
  • PagedList.loadAround() এখন ইন্ডেক্স ভুল হলে IndexOutOfBoundsException দেখায়। আগে এটি অন্য কোনও অস্পষ্ট ব্যতিক্রমের কারণে ক্র্যাশ করতে পারত।
  • এমন একটি সমস্যার সমাধান করা হয়েছে যেখানে অপরিবর্তিত ডেটার সাথে অত্যন্ত ছোট প্রাথমিক লোড সাইজের ফলে আর কোনও লোডিং হবে না b/113122599

ভার্সন 2.0.0

ভার্সন 2.0.0

১ অক্টোবর, ২০১৮

একটি বাগফিক্স সহ পেজিং 2.0.0 রিলিজ করা হয়েছে।

সমস্যার সমাধান

  • PositionalDataSource এবং প্লেসহোল্ডার b/114635383 ব্যবহার করে খুব দ্রুত স্ক্রল করার সময় যে ক্র্যাশ হতে পারত তা ঠিক করা হয়েছে।

ভার্সন 2.0.0-beta01

২ জুলাই, ২০১৮

সমস্যার সমাধান

  • কিছু প্রিপেন্ড কেসে (প্লেসহোল্ডার বন্ধ, PositionalDataSource) কন্টেন্ট অদৃশ্য হয়ে যাওয়ার সমস্যা সমাধান করা হয়েছে b/80149146
  • (1.0.1-এ আগেই রিলিজ করা হয়েছে) ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে PagedListAdapter এবং AsyncPagedListDiffer মুভ ইভেন্ট সিগন্যাল করতে ব্যর্থ হবে। b/110711937

AndroidX-এর আগের ডিপেন্ডেন্সি

এর পরে, Paging-এর AndroidX-এর আগের ভার্সনের জন্য, এই নির্ভরতাগুলি অন্তর্ভুক্ত করুন:

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

ভার্সন ১.০.১

ভার্সন 1.0.1

২৬ জুন, ২০১৮

runtime-এ একটিমাত্র বাগফিক্স সহ পেজিং 1.0.1 রিলিজ করা হয়েছে। আমরা স্থিতিশীলতার জন্য 1.0.1 ব্যবহার করার জন্য সাজেস্ট করি। Paging RxJava2 1.0.1-ও রিলিজ করা হয়েছে এবং এটি 1.0.0-rc1-এর মতো একই।

সমস্যার সমাধান

  • ক্র্যাশ সংক্রান্ত সমস্যার সমাধান করা হয়েছে যেখানে PagedListAdapter এবং AsyncPagedListDiffer মুভ ইভেন্ট সিগন্যাল করতে পারত না। b/110711937

RxJava2 ভার্সন 1.0.0

RxJava2 ভার্সন 1.0.0-rc1

১৬ মে, ২০১৮

পেজিং RxJava2 1.0.0-rc1 প্রাথমিক আলফা ভার্সন থেকে কোনও পরিবর্তন না করেই রিলিজ ক্যান্ডিডেটে স্থানান্তরিত হচ্ছে।

ভার্সন 1.0.0

ভার্সন 1.0.0-rc1

১৯ এপ্রিল, ২০১৮ পেজিং রিলিজ ক্যান্ডিডেট

Paging 1.0.0 রিলিজের জন্য আমাদের কাছে আর কোনও পরিচিত সমস্যা বা নতুন ফিচার শিডিউল করা নেই। 1.0.0-rc1 ব্যবহার করার জন্য আপনার প্রোজেক্ট আপগ্রেড করুন এবং আমাদের এটি পরীক্ষা করতে সাহায্য করুন যাতে আমরা একটি রক সলিড 1.0.0 শিপ করতে পারি।

এই রিলিজে কোনও পরিবর্তন করা হয়নি, এটি 1.0.0-beta1-এর মতোই।

Version 1.0.0-beta1

৫ এপ্রিল, ২০১৮

রিলিজ ক্যান্ডিডেট হিসেবে প্রকাশ করার আগে পেজিং অল্প সময়ের জন্য বিটা ভার্সনে থাকবে। Paging 1.0-এর জন্য API-তে আর কোনও পরিবর্তন করার পরিকল্পনা আমাদের নেই এবং API-তে কোনও পরিবর্তন করার জন্য অনেক বেশি পরিশ্রম করতে হবে।

পেজিংয়ের জন্য Alpha RxJava2 সাপোর্ট আলাদা ঐচ্ছিক মডিউল (android.arch.paging:rxjava2:1.0.0-alpha1) হিসেবে রিলিজ করা হয়েছে এবং এটি স্থিতিশীল না হওয়া পর্যন্ত সাময়িকভাবে আলাদাভাবে ভার্সন করা হবে।

এই নতুন লাইব্রেরি LivePagedListBuilder-এর একটি RxJava2 বিকল্প প্রদান করে, যা Observables এবং Flowables তৈরি করতে পারে, Executors-এর পরিবর্তে Schedulers নেয়:

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

জাভা

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

নতুন ফিচার

  • নতুন android.arch.paging:rxjava2 আর্টিফ্যাক্টের মাধ্যমে RxPagedListBuilder যোগ করা হয়েছে।

API-তে পরিবর্তন

  • বিল্ডারে এক্সিকিউটরদের ভূমিকা স্পষ্ট করতে API-তে পরিবর্তন করা হয়েছে:

    • setBackgroundThreadExecutor()-এর নাম পরিবর্তন করে setFetchExecutor() করা হয়েছে (PagedList.Builder ও LivePagedListBuilder-এ)

    • setMainThreadExecutor()-এর নাম পরিবর্তন করে setNotifyExecutor() (PagedList.Builder-এ) করা হয়েছে।

  • PagedList.mCallbacks মেম্বারকে ব্যক্তিগত হিসেবে সেট করার সমস্যা সমাধান করা হয়েছে।

সমস্যার সমাধান

  • LivePagedListBuilder, Arch Components IO থ্রেড পুলের পরিবর্তে, নির্দিষ্ট এক্সিকিউটরে প্রাথমিক PagedList লোড ট্রিগার করে।

  • ইন্টার্নাল DataSource র‍্যাপারে (DataSource.map প্রয়োগ করতে ব্যবহার করা হয়, এর পাশাপাশি প্লেসহোল্ডার-বন্ধ করা PositionalDataSource লোডিং) ভুল আচরণ ঠিক করা হয়েছে b/77237534

Version 1.0.0-alpha7

২১ মার্চ, ২০১৮

Lifecycles 1.1.1-এর সাথে পেজিং 1.0.0-alpha7 রিলিজ করা হয়েছে। যেহেতু Paging alpha7 উপরে উল্লেখ করা Function ক্লাসের মুভের উপর নির্ভর করে, তাই আপনাকে lifecycle:runtime ডিপেনডেন্সি android.arch.lifecycle:runtime:1.1.1-এ আপডেট করতে হবে।

পেজিং alpha7 হল পেজিং বিটা ভার্সনে আসার আগে চূড়ান্ত রিলিজ করার পরিকল্পনা।

API-তে পরিবর্তন

  • DataSource.LoadParams অবজেক্টে এখন পাবলিক কনস্ট্রাক্টর আছে এবং DataSource.LoadCallback অবজেক্ট এখন অ্যাবস্ট্রাক্ট। এটি DataSource র‍্যাপ করা বা মক কলব্যাকের মাধ্যমে সরাসরি DataSource টেস্ট করার সুবিধা দেয়। b/৭২৬০০৪২১
  • DataSource ও DataSource.Factory -এর জন্য ম্যাপার
    • map(Function<IN,OUT>) আপনাকে DataSource-এর মাধ্যমে লোড করা ফলাফল ট্রান্সফর্ম, র‍্যাপ বা সাজাতে দেয়।
    • mapByPage(<List<IN>,List<OUT>>) ব্যাচ প্রসেসিংয়ের জন্য একই সুবিধা চালু করে (যেমন, SQL থেকে লোড করা আইটেমকে যদি অতিরিক্তভাবে আলাদা ডেটাবেস কোয়েরি করতে হয়, তাহলে সেটি ব্যাচ হিসেবে করা যেতে পারে।)
  • PagedList#getDataSource()-কে সুবিধাজনক পদ্ধতি হিসেবে যোগ করা হয়েছে b/72611341
  • API থেকে সব বাতিল করা ক্লাস সরিয়ে দেওয়া হয়েছে, যার মধ্যে recyclerview.extensions প্যাকেজের অবশিষ্টাংশ এবং LivePagedListProvider অন্তর্ভুক্ত।
  • ম্যাপের কার্যকারিতা চালু করতে DataSource.Factory-কে ইন্টারফেস থেকে অ্যাবস্ট্র্যাক্ট ক্লাসে পরিবর্তন করা হয়েছে।

সমস্যার সমাধান

  • Changed Builders to be final. b/70848565
  • মাল্টি-টেবিল কোয়েরি ম্যানেজ করার জন্য রুম DataSource ইমপ্লিমেন্টেশন এখন ঠিক করা হয়েছে - এই সমাধান রুম 1.1.0-beta1-এর মধ্যে রয়েছে, উপরে দেখুন।
  • প্লেসহোল্ডার চালু থাকলে এবং মোট সাইজ পৃষ্ঠা সাইজের সঠিক মাল্টিপল হলে, PositionalDataSource-এর জন্য BoundaryCallback.onItemAtEndLoaded কল করা হত না, এই বাগটি সমাধান করা হয়েছে।

Version 1.0.0-alpha5

২২ জানুয়ারি, ২০১৮

সমস্যার সমাধান

  • প্লেসহোল্ডার বন্ধ করা থাকলে পৃষ্ঠা লোড হওয়া সংক্রান্ত সমস্যার সমাধান করা b/70573345
  • IllegalArgumentException বাগ b/70360195 ট্র্যাক করার জন্য অতিরিক্ত লগিং (এবং সম্ভাব্য রুম-সাইড সমাধান)
  • Javadoc স্যাম্পেল কোড সংক্রান্ত সমস্যার সমাধান b/70411933, b/71467637