Ver código fonte

升级PagingLib

infinite.likelins 4 anos atrás
pai
commit
96534d7b74

+ 1 - 1
README.MD

@@ -23,7 +23,7 @@
 
 - 项目使用单activity+多Fragment,没有封装基类等,均使用AndroidX的兼容类,避免封装的基类带来的不便。如果需要基类的基本需求,使用Kotlin的类扩展语法糖
 
-- **集成框架基础 :** androidx.leanback + andoridx.core + KTX + Lifecycle + ViewModel + LiveData + Coroutines + DataBinding + Room + Paging + Navigation + Constraintlayout + WorkManager + Viewpager2
+- **集成框架基础 :** androidx.leanback + andoridx.core + KTX + Lifecycle + ViewModel + LiveData + Coroutines + DataBinding + Room + Paging + Navigation + ConstraintLayout + WorkManager + Viewpager2
 
 - **以andoridxd的Fragment为标准新页面的基类,不重写基础类**
 

+ 29 - 29
app/build.gradle

@@ -1,8 +1,9 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
-apply plugin: 'kotlin-kapt'
-apply plugin: "androidx.navigation.safeargs.kotlin"
+plugins {
+    id 'com.android.application'
+    id 'kotlin-android'
+    id 'kotlin-kapt'
+    id 'androidx.navigation.safeargs.kotlin'
+}
 
 android {
     compileSdkVersion 29
@@ -23,12 +24,14 @@ android {
                              "room.expandProjection": "true"]
             }
         }
+        ndkVersion "21.3.6528147"
         buildFeatures {
             dataBinding true
         }
-        flavorDimensions "1.2.1"
     }
 
+    flavorDimensions "1.2.4"
+
     aaptOptions {
         noCompress "webp"  //表示不让aapt压缩的文件后缀
     }
@@ -61,13 +64,13 @@ android {
     productFlavors {
 
         kids {
-            versionName "1.2.2"
-            dimension "1.2.1"
+            versionName "1.2.3"
+            dimension "1.2.3"
         }
 
         child {
-            versionName "1.2.2"
-            dimension "1.2.1"
+            versionName "1.2.4"
+            dimension "1.2.4"
         }
 
     }
@@ -101,11 +104,9 @@ android {
     android.applicationVariants.all { variant ->
         variant.outputs.each { output ->
             if ("release" == buildType.name)
-                output.outputFileName =
-                        "${variant.productFlavors[0].name}_${defaultConfig.versionCode}_v${variant.productFlavors[0].versionName}_release.apk"
+                output.outputFileName = "${variant.productFlavors[0].name}_${defaultConfig.versionCode}_v${variant.productFlavors[0].versionName}_release.apk"
             else
-                output.outputFileName =
-                        "${variant.productFlavors[0].name}_v${defaultConfig.versionName}.apk"
+                output.outputFileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}.apk"
         }
     }
 
@@ -140,23 +141,22 @@ dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
 
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
-    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
-    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
 
     implementation 'androidx.appcompat:appcompat:1.2.0'
-    implementation 'androidx.core:core-ktx:1.3.1'
-    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+    implementation 'androidx.core:core-ktx:1.5.0-alpha05'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
     implementation 'androidx.viewpager2:viewpager2:1.0.0'
-    implementation 'androidx.paging:paging-runtime:2.1.2'
-    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
-    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
-    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
-    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
-    implementation 'androidx.lifecycle:lifecycle-reactivestreams:2.2.0'
-    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
-    implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
-    implementation 'androidx.room:room-runtime:2.2.5'
-    implementation 'androidx.room:room-ktx:2.2.5'
+    implementation 'androidx.paging:paging-runtime-ktx:3.0.0-alpha12'
+    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0-rc01'
+    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0-rc01'
+    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0-rc01'
+    implementation 'androidx.lifecycle:lifecycle-reactivestreams-ktx:2.3.0-rc01'
+    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.2'
+    implementation 'androidx.navigation:navigation-ui-ktx:2.3.2'
+    implementation 'androidx.room:room-runtime:2.3.0-alpha04'
+    implementation 'androidx.room:room-ktx:2.3.0-alpha04'
     implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
     implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
     implementation 'androidx.cardview:cardview:1.0.0'
@@ -165,7 +165,7 @@ dependencies {
 
     implementation 'com.google.code.gson:gson:2.8.6'
 
-    implementation 'com.tencent.bugly:crashreport:3.1.9'
+    implementation 'com.tencent.bugly:crashreport:3.3.3'
 
     implementation 'com.github.bumptech.glide:glide:4.11.0'
     implementation 'com.github.SheHuan:NiceImageView:1.0.5'

+ 0 - 14
app/src/main/java/com/bearya/data/dao/AnalysisDao.kt

@@ -1,14 +0,0 @@
-package com.bearya.data.dao
-
-import androidx.paging.DataSource
-import androidx.room.Dao
-import androidx.room.Query
-import com.bearya.data.entity.Analysis
-
-@Dao
-interface AnalysisDao {
-
-    @Query("SELECT * FROM Analysis where `sectionId` = :id")
-    fun findAnalysisBySectionId(id:Int): DataSource.Factory<Int, Analysis>
-
-}

+ 2 - 2
app/src/main/java/com/bearya/data/dao/ChapterDao.kt

@@ -1,6 +1,6 @@
 package com.bearya.data.dao
 
-import androidx.paging.DataSource
+import androidx.paging.PagingSource
 import androidx.room.Dao
 import androidx.room.Query
 import com.bearya.data.entity.Chapter
@@ -9,6 +9,6 @@ import com.bearya.data.entity.Chapter
 interface ChapterDao {
 
     @Query("SELECT * FROM Chapter WHERE `enable` = 1 AND `level`= :grade")
-    fun findChaptersByGradeLevel(grade: Int): DataSource.Factory<Int, Chapter>
+    fun findChapterByGrade(grade: Int): PagingSource<Int, Chapter>
 
 }

+ 0 - 14
app/src/main/java/com/bearya/data/dao/SectionDao.kt

@@ -1,14 +0,0 @@
-package com.bearya.data.dao
-
-import androidx.paging.DataSource
-import androidx.room.Dao
-import androidx.room.Query
-import com.bearya.data.entity.Section
-
-@Dao
-interface SectionDao {
-
-    @Query("SELECT * FROM Section WHERE `enable` = 1 AND `chapterId`= :chapterId")
-    fun findSectionsByChapterId(chapterId: Int): DataSource.Factory<Int, Section>
-
-}

+ 1 - 2
app/src/main/java/com/bearya/data/repository/ChapterRepository.kt

@@ -3,11 +3,10 @@ package com.bearya.data.repository
 import com.bearya.data.dao.ChapterDao
 import com.bearya.kids.AppDatabase
 
-
 class ChapterRepository {
 
     private val chapterDao: ChapterDao by lazy { AppDatabase.instance.chapterDao() }
 
-    fun findChaptersByGradeLevel(grade: Int = 1) = chapterDao.findChaptersByGradeLevel(grade)
+    fun findChaptersByGrade(grade: Int = 1) = chapterDao.findChapterByGrade(grade)
 
 }

+ 2 - 3
app/src/main/java/com/bearya/kids/AppDatabase.kt

@@ -15,12 +15,10 @@ import com.bearya.data.entity.Section
     Chapter::class,
     Section::class,
     Analysis::class
-], version = 1, exportSchema = true)
+], version = 2, exportSchema = true)
 abstract class AppDatabase : RoomDatabase() {
 
     abstract fun chapterDao(): ChapterDao
-    abstract fun sectionDao(): SectionDao
-    abstract fun analysisDao(): AnalysisDao
 
     companion object {
 
@@ -28,6 +26,7 @@ abstract class AppDatabase : RoomDatabase() {
 
         val instance: AppDatabase by lazy {
             val room = Room.databaseBuilder(mContext, AppDatabase::class.java, "kids.db")
+                    .fallbackToDestructiveMigration()
                     .createFromAsset("database/kids.db")
             room.build()
         }

+ 4 - 22
app/src/main/java/com/bearya/kids/analysis/AnalysisAdapter.kt

@@ -16,10 +16,7 @@ class AnalysisAdapter : RecyclerView.Adapter<AnalysisViewHolder>() {
     val data: MutableList<String> by lazy { mutableListOf<String>() }
     var onItemClickListener: OnItemClickListener<String>? = null
 
-    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AnalysisViewHolder =
-        AnalysisViewHolder(
-            ItemSectionBinding.inflate(LayoutInflater.from(parent.context), parent, false).root
-        )
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AnalysisViewHolder = AnalysisViewHolder(ItemSectionBinding.inflate(LayoutInflater.from(parent.context), parent, false).root)
 
     override fun onBindViewHolder(holder: AnalysisViewHolder, position: Int) {
         val item = data[position]
@@ -50,30 +47,15 @@ class AnalysisPreviewAdapter : RecyclerView.Adapter<AnalysisPreviewViewHolder>()
     private var currentFocusItemIndex = 0
     private var recyclerView: RecyclerView? = null
 
-    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AnalysisPreviewViewHolder =
-        AnalysisPreviewViewHolder(
-            ItemSectionPreviewBinding.inflate(
-                LayoutInflater.from(parent.context),
-                parent,
-                false
-            ).root
-        )
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AnalysisPreviewViewHolder = AnalysisPreviewViewHolder(ItemSectionPreviewBinding.inflate(LayoutInflater.from(parent.context), parent, false).root)
 
     override fun onBindViewHolder(holder: AnalysisPreviewViewHolder, position: Int) {
         val item = data[position]
 
-        val index = position + 1
-        holder.bindView?.index = "$index"
-
+        holder.bindView?.index = "${position + 1}"
         holder.bindView?.image = item.assetsPath()
 
-        holder.bindView?.cover?.setBorderColor(
-            ResourcesCompat.getColor(
-                holder.itemView.context.resources,
-                if (position == currentFocusItemIndex) R.color.colorBlue else R.color.colorWhite,
-                null
-            )
-        )
+        holder.bindView?.cover?.setBorderColor(ResourcesCompat.getColor(holder.itemView.context.resources, if (position == currentFocusItemIndex) R.color.colorBlue else R.color.colorWhite, null))
 
         holder.itemView.setOnClickListener { v -> onItemClickListener?.invoke(v, item, position) }
     }

+ 3 - 10
app/src/main/java/com/bearya/kids/analysis/AnalysisFragment.kt

@@ -8,7 +8,6 @@ import android.view.ViewGroup
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.lifecycleScope
-import androidx.lifecycle.observe
 import androidx.navigation.findNavController
 import androidx.navigation.fragment.navArgs
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -40,11 +39,7 @@ class AnalysisFragment : Fragment() {
         viewModel.analysisPath.setData(args.sectionPath)
     }
 
-    override fun onCreateView(
-        inflater: LayoutInflater,
-        container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         bindView = FragmentAnalysisBinding.inflate(inflater, container, false)
         bindView.lifecycleOwner = viewLifecycleOwner
         return bindView.root
@@ -85,8 +80,7 @@ class AnalysisFragment : Fragment() {
             }
         }
 
-        bindView.previewRecyclerView.layoutManager =
-            LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
+        bindView.previewRecyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
         bindView.previewRecyclerView.adapter = previewAdapter
         previewAdapter.onItemClickListener = { _: View, _: String?, position: Int ->
             bindView.playPager.currentItem = position
@@ -106,8 +100,7 @@ class AnalysisFragment : Fragment() {
     private fun onItemEvents() {
         cancelHideSectionPreview()
 
-        val visibility = bindView.previewRecyclerView.visibility.takeIf { it == View.VISIBLE }
-            ?.let { View.GONE } ?: View.VISIBLE
+        val visibility = bindView.previewRecyclerView.visibility.takeIf { it == View.VISIBLE }?.let { View.GONE } ?: View.VISIBLE
         bindView.previewRecyclerView.visibility = visibility
         bindView.back.visibility = visibility
 

+ 2 - 2
app/src/main/java/com/bearya/kids/chapter/ChapterAdapter.kt

@@ -6,7 +6,7 @@ import android.view.View
 import android.view.ViewGroup
 import androidx.core.view.ViewCompat
 import androidx.databinding.DataBindingUtil
-import androidx.paging.PagedListAdapter
+import androidx.paging.PagingDataAdapter
 import androidx.recyclerview.widget.DiffUtil
 import androidx.recyclerview.widget.RecyclerView
 import com.bearya.data.entity.Chapter
@@ -14,7 +14,7 @@ import com.bearya.kids.databinding.ItemChapterBinding
 import library.OnItemClickListener
 import library.ext.assetsPath
 
-class ChapterAdapter : PagedListAdapter<Chapter, UnitViewHolder>(object : DiffUtil.ItemCallback<Chapter>() {
+class ChapterAdapter : PagingDataAdapter<Chapter, UnitViewHolder>(object : DiffUtil.ItemCallback<Chapter>() {
 
     override fun areItemsTheSame(oldItem: Chapter, newItem: Chapter): Boolean {
         return oldItem.id == newItem.id

+ 7 - 13
app/src/main/java/com/bearya/kids/chapter/ChapterFragment.kt

@@ -7,8 +7,7 @@ import android.view.ViewGroup
 import androidx.databinding.DataBindingUtil
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
-import androidx.lifecycle.observe
-import androidx.navigation.findNavController
+import androidx.navigation.fragment.findNavController
 import androidx.navigation.fragment.navArgs
 import androidx.recyclerview.widget.GridLayoutManager
 import com.bearya.data.entity.Chapter
@@ -24,8 +23,8 @@ class ChapterFragment : Fragment() {
 
     private val chapterAdapter: ChapterAdapter by lazy {
         ChapterAdapter().apply {
-            onItemClickListener = { view: View, item: Chapter?, _: Int ->
-                view.findNavController().navigate(
+            onItemClickListener = { _: View, item: Chapter?, _: Int ->
+                findNavController().navigate(
                     ChapterFragmentDirections.actionChapterFragmentToSectionFragment("chapter/${item?.name}/resources")
                 )
             }
@@ -37,11 +36,7 @@ class ChapterFragment : Fragment() {
         viewModel.gradeLevel.setData(args.grade)
     }
 
-    override fun onCreateView(
-        inflater: LayoutInflater,
-        container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         bindView = DataBindingUtil.inflate(inflater, R.layout.fragment_chapter, container, false)
         bindView.lifecycleOwner = viewLifecycleOwner
         return bindView.root
@@ -52,13 +47,12 @@ class ChapterFragment : Fragment() {
 
         bindView.viewModel = viewModel
 
-        bindView.back.setOnClickListener { v -> v.findNavController().navigateUp() }
-        bindView.chapter.layoutManager =
-            GridLayoutManager(context, 2, GridLayoutManager.HORIZONTAL, false)
+        bindView.back.setOnClickListener { findNavController().navigateUp() }
+        bindView.chapter.layoutManager = GridLayoutManager(context, 2, GridLayoutManager.HORIZONTAL, false)
         bindView.chapter.adapter = chapterAdapter
 
         viewModel.chapters.observe(viewLifecycleOwner) {
-            chapterAdapter.submitList(it)
+            chapterAdapter.submitData(lifecycle , it)
         }
 
     }

+ 6 - 6
app/src/main/java/com/bearya/kids/chapter/ChapterViewModel.kt

@@ -1,10 +1,10 @@
 package com.bearya.kids.chapter
 
 import androidx.lifecycle.*
-import androidx.paging.PagedList
+import androidx.paging.PagingData
 import com.bearya.data.entity.Chapter
 import com.bearya.data.repository.ChapterRepository
-import library.ext.toLiveData
+import library.ext.buildPagerLiveData
 
 class ChapterViewModel : ViewModel() {
 
@@ -14,14 +14,14 @@ class ChapterViewModel : ViewModel() {
 
     private val chapterRepository: ChapterRepository by lazy { ChapterRepository() }
 
-    val gradeLevel : MutableLiveData<Int> by lazy { MutableLiveData<Int>() }
+    val gradeLevel: MutableLiveData<Int> by lazy { MutableLiveData<Int>() }
 
-    val chapters: LiveData<PagedList<Chapter>>  = gradeLevel.switchMap {
-        chapterRepository.findChaptersByGradeLevel(it).toLiveData()
+    val chapters: LiveData<PagingData<Chapter>> = gradeLevel.switchMap {
+        buildPagerLiveData(viewModelScope) { chapterRepository.findChaptersByGrade(it) }
     }
 
     val gradeName: LiveData<String> = gradeLevel.map {
-        when(it) {
+        when (it) {
             gradeLevelPrimary -> "小班"
             gradeLevelMiddle -> "中班"
             gradeLevelLarge -> "大班"

+ 4 - 4
app/src/main/java/com/bearya/kids/grade/GradeFragment.kt

@@ -5,7 +5,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.fragment.app.Fragment
-import androidx.navigation.findNavController
+import androidx.navigation.fragment.findNavController
 import com.bearya.kids.BuildConfig
 import com.bearya.kids.R
 import com.bearya.kids.databinding.FragmentGradeBinding
@@ -42,9 +42,9 @@ class GradeFragment : Fragment(), View.OnClickListener, View.OnFocusChangeListen
 
     override fun onClick(v: View?) {
         when (v?.id) {
-            R.id.grade_primary -> v.findNavController().navigate(GradeFragmentDirections.actionGradeFragmentToChapterFragment(gradeLevelPrimary))
-            R.id.grade_middle -> v.findNavController().navigate(GradeFragmentDirections.actionGradeFragmentToChapterFragment(gradeLevelMiddle))
-            R.id.grade_large -> v.findNavController().navigate(GradeFragmentDirections.actionGradeFragmentToChapterFragment(gradeLevelLarge))
+            R.id.grade_primary -> findNavController().navigate(GradeFragmentDirections.actionGradeFragmentToChapterFragment(gradeLevelPrimary))
+            R.id.grade_middle -> findNavController().navigate(GradeFragmentDirections.actionGradeFragmentToChapterFragment(gradeLevelMiddle))
+            R.id.grade_large -> findNavController().navigate(GradeFragmentDirections.actionGradeFragmentToChapterFragment(gradeLevelLarge))
             R.id.back -> requireActivity().finish()
         }
     }

+ 5 - 25
app/src/main/java/com/bearya/kids/section/SectionAdapter.kt

@@ -12,17 +12,13 @@ import com.bearya.kids.databinding.ItemSectionPreviewBinding
 import library.OnItemClickListener
 import library.ext.assetsPath
 
-class SectionPagerAdapter :
-    RecyclerView.Adapter<SectionPagerViewHolder>() {
+class SectionPagerAdapter : RecyclerView.Adapter<SectionPagerViewHolder>() {
 
     var onItemClickListener: OnItemClickListener<String>? = null
 
     val data: MutableList<String> by lazy { mutableListOf<String>() }
 
-    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SectionPagerViewHolder =
-        SectionPagerViewHolder(
-            ItemSectionBinding.inflate(LayoutInflater.from(parent.context), parent, false).root
-        )
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SectionPagerViewHolder = SectionPagerViewHolder(ItemSectionBinding.inflate(LayoutInflater.from(parent.context), parent, false).root)
 
     override fun onBindViewHolder(holder: SectionPagerViewHolder, position: Int) {
         val item = data[position]
@@ -52,30 +48,14 @@ class SectionPreviewAdapter : RecyclerView.Adapter<SectionPreviewViewHolder>() {
     private var currentFocusItemIndex = 0
     private var recyclerView: RecyclerView? = null
 
-    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SectionPreviewViewHolder =
-        SectionPreviewViewHolder(
-            ItemSectionPreviewBinding.inflate(
-                LayoutInflater.from(parent.context),
-                parent,
-                false
-            ).root
-        )
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SectionPreviewViewHolder = SectionPreviewViewHolder(ItemSectionPreviewBinding.inflate(LayoutInflater.from(parent.context), parent, false).root)
 
     override fun onBindViewHolder(holder: SectionPreviewViewHolder, position: Int) {
         val item = data[position]
 
-        val index = position + 1
-        holder.bindView?.index = "$index"
-
+        holder.bindView?.index = "${position + 1}"
         holder.bindView?.image = item.assetsPath()
-
-        holder.bindView?.cover?.setBorderColor(
-            ResourcesCompat.getColor(
-                holder.itemView.context.resources,
-                if (position == currentFocusItemIndex) R.color.colorBlue else R.color.colorWhite,
-                null
-            )
-        )
+        holder.bindView?.cover?.setBorderColor(ResourcesCompat.getColor(holder.itemView.context.resources, if (position == currentFocusItemIndex) R.color.colorBlue else R.color.colorWhite, null))
 
         holder.itemView.setOnClickListener { v -> onItemClickListener?.invoke(v, item, position) }
     }

+ 6 - 10
app/src/main/java/com/bearya/kids/section/SectionFragment.kt

@@ -9,14 +9,14 @@ import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.lifecycleScope
-import androidx.lifecycle.observe
-import androidx.navigation.findNavController
+import androidx.navigation.fragment.findNavController
 import androidx.navigation.fragment.navArgs
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.viewpager2.widget.ViewPager2
 import com.bearya.kids.databinding.FragmentSectionBinding
 import com.orhanobut.logger.Logger
 import kotlinx.coroutines.*
+
 import library.ext.setData
 
 class SectionFragment : Fragment() {
@@ -41,11 +41,7 @@ class SectionFragment : Fragment() {
         viewModel.sectionDirPath.setData(args.sectionDirPath)
     }
 
-    override fun onCreateView(
-        inflater: LayoutInflater,
-        container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         bindView = FragmentSectionBinding.inflate(inflater, container, false)
         bindView.lifecycleOwner = viewLifecycleOwner
         return bindView.root
@@ -53,7 +49,7 @@ class SectionFragment : Fragment() {
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
 
-        bindView.back.setOnClickListener { v -> v.findNavController().navigateUp() }
+        bindView.back.setOnClickListener { findNavController().navigateUp() }
 
         bindView.playPager.adapter = pagerAdapter
         bindView.playPager.registerOnPageChangeCallback(pageChangeCallback)
@@ -65,7 +61,7 @@ class SectionFragment : Fragment() {
             if (KeyEvent.ACTION_UP == event.action) {
                 when (keyCode) {
                     KeyEvent.KEYCODE_MENU -> onItemEvents()
-                    KeyEvent.KEYCODE_BACK -> view.findNavController().navigateUp()
+                    KeyEvent.KEYCODE_BACK -> findNavController().navigateUp()
                     KeyEvent.KEYCODE_DPAD_LEFT -> {
                         if (viewModel.playIndex.value ?: 0 > 0) {
                             viewModel.playIndex.setData(viewModel.playIndex.value?.minus(1))
@@ -114,7 +110,7 @@ class SectionFragment : Fragment() {
         bindView.analysis.setOnClickListener {
             viewModel.analysisPath.value?.apply {
                 val action = SectionFragmentDirections.actionSectionFragmentToAnalysisFragment(this)
-                it.findNavController().navigate(action)
+                findNavController().navigate(action)
             } ?: Toast.makeText(requireContext(), "", Toast.LENGTH_SHORT).show()
         }
 

+ 2 - 8
app/src/main/java/com/bearya/kids/splash/SplashFragment.kt

@@ -4,15 +4,12 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.databinding.DataBindingUtil
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.lifecycleScope
-import androidx.navigation.Navigation
+import androidx.navigation.fragment.findNavController
 import com.bearya.kids.R
 import com.bearya.kids.databinding.FragmentSplashBinding
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.delay
-import kotlinx.coroutines.withContext
 
 class SplashFragment : Fragment() {
 
@@ -22,9 +19,7 @@ class SplashFragment : Fragment() {
         super.onCreate(savedInstanceState)
         lifecycleScope.launchWhenResumed {
             delay(3000)
-            withContext(Dispatchers.Main) {
-                Navigation.findNavController(requireActivity(), R.id.container_fragment).navigate(R.id.action_splashFragment_to_gradeFragment)
-            }
+            findNavController().navigate(R.id.action_splashFragment_to_gradeFragment)
         }
     }
 
@@ -34,5 +29,4 @@ class SplashFragment : Fragment() {
         return bindView.root
     }
 
-
 }

+ 0 - 8
app/src/main/java/library/ext/LiveDataExt.kt

@@ -1,11 +1,7 @@
 package library.ext
 
 import android.os.Looper
-import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
-import androidx.paging.DataSource
-import androidx.paging.LivePagedListBuilder
-import androidx.paging.PagedList
 
 /**
  * 线程分配设置数据到LiveData
@@ -16,7 +12,3 @@ fun <T> MutableLiveData<T>.setData(data: T?) =
         } else {
             postValue(data)
         }
-
-fun <T, K> DataSource.Factory<T, K>.toLiveData(pageSize: Int = 20,
-                                               callback: PagedList.BoundaryCallback<K>? = null): LiveData<PagedList<K>> =
-        LivePagedListBuilder(this, pageSize).setBoundaryCallback(callback).build()

+ 0 - 14
app/src/main/java/library/ext/PagedListExt.kt

@@ -1,14 +0,0 @@
-package library.ext
-
-import androidx.paging.PagedList
-
-fun PagedList.Config.Builder.create(pageSize: Int = 10,
-                                    prefetchDistance: Int = 10,
-                                    initialLoadSizeHint: Int = 10,
-                                    enablePlaceholders: Boolean = false): PagedList.Config =
-        PagedList.Config.Builder()
-                .setPageSize(pageSize)
-                .setPrefetchDistance(prefetchDistance)
-                .setInitialLoadSizeHint(initialLoadSizeHint)
-                .setEnablePlaceholders(enablePlaceholders)
-                .build()

+ 8 - 0
app/src/main/java/library/ext/PagerExt.kt

@@ -0,0 +1,8 @@
+package library.ext
+
+import androidx.paging.*
+import kotlinx.coroutines.CoroutineScope
+
+fun <Key : Any, Value : Any> buildPagerLiveData(scope: CoroutineScope, source: () -> PagingSource<Key, Value>) =
+    Pager(config = PagingConfig(pageSize = 5, prefetchDistance = 2, initialLoadSize = 5, enablePlaceholders = false),
+        pagingSourceFactory = source).liveData.cachedIn(scope)

+ 2 - 2
app/version.properties

@@ -1,2 +1,2 @@
-#Wed Sep 02 15:42:42 CST 2020
-VERSION_CODE=336
+#Thu Jan 28 15:32:23 CST 2021
+VERSION_CODE=389

+ 3 - 3
build.gradle

@@ -1,15 +1,15 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
-    ext.kotlin_version = '1.4.0'
+    ext.kotlin_version = '1.4.21'
     repositories {
         google()
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.0.1'
+        classpath 'com.android.tools.build:gradle:4.1.2'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-        classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0'
+        classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.3.2'
     }
 }
 

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Tue Jun 02 16:37:50 CST 2020
+#Tue Oct 27 08:56:43 CST 2020
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip