From 4b100c261c30997d740f418e04e81bfb46dcab52 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Wed, 29 Oct 2025 00:48:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=BB=84=E5=B8=83=E5=B1=80=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20#170?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/main/MainActivity.kt | 20 +++--------- .../bookshelf/books/BookshelfFragment2.kt | 31 +++++++++++++------ 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index d993ee740..cf6bf5652 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -111,11 +111,6 @@ open class MainActivity : VMBaseActivity(), binding.viewPagerMain.currentItem = 0 return } - - val fragment = fragmentMap[getFragmentId(0)] as? BookshelfFragment2 - if (fragment?.back() == true) { - return - } } } onBackPressedDispatcher.addCallback(this, backCallback) @@ -434,8 +429,8 @@ open class MainActivity : VMBaseActivity(), } efab.setOnClickListener { - startActivity() - } + startActivity() + } button.setOnClickListener { efab.let { it1 -> @@ -509,8 +504,7 @@ open class MainActivity : VMBaseActivity(), } private fun updateBackCallbackState() { - val fragment = fragmentMap[getFragmentId(0)] as? BookshelfFragment2 - backCallback.isEnabled = (pagePosition != 0) || (fragment?.canHandleBack() == true) + backCallback.isEnabled = (pagePosition != 0) } private inner class TabFragmentPageAdapter( @@ -522,13 +516,7 @@ open class MainActivity : VMBaseActivity(), override fun createFragment(position: Int): Fragment { val fragment = when (getFragmentId(position)) { idBookshelf1 -> BookshelfFragment1(position) - idBookshelf2 -> { - val bookshelfFragment = BookshelfFragment2(position) - bookshelfFragment.setGroupIdChangeListener { - updateBackCallbackState() - } - bookshelfFragment - } + idBookshelf2 -> BookshelfFragment2(position) idBookshelf3 -> BookshelfFragment3(position) idExplore -> ExploreFragment(position) idRss -> RssFragment(position) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt index 6801c9d3a..fb59d427b 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.view.View +import androidx.activity.OnBackPressedCallback import androidx.appcompat.widget.SearchView import androidx.core.app.ActivityOptionsCompat import androidx.core.view.isGone @@ -78,10 +79,6 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) private var groupIdChangeListener: OnGroupIdChangeListener? = null - fun setGroupIdChangeListener(listener: OnGroupIdChangeListener) { - this.groupIdChangeListener = listener - } - private val booksAdapter: BaseBooksAdapter<*> by lazy { when (bookshelfLayoutMode) { 0 -> { @@ -113,12 +110,27 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) override var books: List = emptyList() private var enableRefresh = true + private lateinit var backCallback: OnBackPressedCallback + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { setSupportToolbar(binding.topBar) initRecyclerView() initBookGroupData() initAllBooksData() initBooksData() + backCallback = object : OnBackPressedCallback(false) { // 初始禁用 + override fun handleOnBackPressed() { + if (back()) { + updateBackCallbackState() + } + } + } + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backCallback) + } + + private fun updateBackCallbackState() { + //每次进出书架时,判断是否启用回调 + backCallback.isEnabled = groupId != BookGroup.IdRoot } @Suppress("UNCHECKED_CAST") @@ -272,9 +284,11 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) groupId = BookGroup.Companion.IdRoot initBooksData() groupIdChangeListener?.onGroupIdChanged() - return true + updateBackCallbackState() + return false } - return false + return true + //需要提前设置,因为在返回时触发 } override fun onQueryTextSubmit(query: String?): Boolean { @@ -324,6 +338,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) groupId = item.groupId initBooksData() groupIdChangeListener?.onGroupIdChanged() + updateBackCallbackState() } } } @@ -365,10 +380,6 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) } } - fun canHandleBack(): Boolean { - return groupId != BookGroup.Companion.IdRoot - } - override fun getItems(): List { return if (groupId == BookGroup.Companion.IdRoot) { bookGroups + books