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 9be55c01b..d903e769e 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 @@ -320,7 +320,6 @@ class MainActivity : VMBaseActivity(), observeEvent(EventBus.NOTIFY_MAIN) { binding.apply { upBottomMenu() - viewPagerMain.adapter?.notifyDataSetChanged() if (it) { viewPagerMain.setCurrentItem(bottomMenuCount - 1, false) } @@ -350,6 +349,7 @@ class MainActivity : VMBaseActivity(), index++ realPositions[index] = idMy bottomMenuCount = index + 1 + adapter.notifyDataSetChanged() } private fun getFragmentId(position: Int): Int { @@ -383,17 +383,27 @@ class MainActivity : VMBaseActivity(), return getFragmentId(position) } - override fun getItemPosition(`object`: Any): Int { + override fun getItemPosition(any: Any): Int { + val position = (any as MainFragmentInterface).position + val fragmentId = getId(position) + if ((fragmentId == idBookshelf1 && any is BookshelfFragment1) + || (fragmentId == idBookshelf2 && any is BookshelfFragment2) + || (fragmentId == idExplore && any is ExploreFragment) + || (fragmentId == idRss && any is RssFragment) + || (fragmentId == idMy && any is MyFragment) + ) { + return POSITION_UNCHANGED + } return POSITION_NONE } override fun getItem(position: Int): Fragment { return when (getId(position)) { - idBookshelf1 -> BookshelfFragment1() - idBookshelf2 -> BookshelfFragment2() - idExplore -> ExploreFragment() - idRss -> RssFragment() - else -> MyFragment() + idBookshelf1 -> BookshelfFragment1(position) + idBookshelf2 -> BookshelfFragment2(position) + idExplore -> ExploreFragment(position) + idRss -> RssFragment(position) + else -> MyFragment(position) } } diff --git a/app/src/main/java/io/legado/app/ui/main/MainFragmentInterface.kt b/app/src/main/java/io/legado/app/ui/main/MainFragmentInterface.kt new file mode 100644 index 000000000..d1cf5d13f --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/main/MainFragmentInterface.kt @@ -0,0 +1,7 @@ +package io.legado.app.ui.main + +interface MainFragmentInterface { + + val position: Int + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt index 23d443f86..78ff2b316 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt @@ -26,10 +26,12 @@ import io.legado.app.ui.book.import.remote.RemoteBookActivity import io.legado.app.ui.book.manage.BookshelfManageActivity import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.file.HandleFileContract +import io.legado.app.ui.main.MainFragmentInterface import io.legado.app.ui.main.MainViewModel import io.legado.app.utils.* -abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment(layoutId) { +abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment(layoutId), + MainFragmentInterface { val activityViewModel by activityViewModels() override val viewModel by viewModels() @@ -83,15 +85,19 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment startActivity { putExtra("groupId", groupId) } + R.id.menu_download -> startActivity { putExtra("groupId", groupId) } + R.id.menu_export_bookshelf -> viewModel.exportBookshelf(books) { file -> exportResult.launch { mode = HandleFileContract.EXPORT - fileData = HandleFileContract.FileData("bookshelf.json", file, "application/json") + fileData = + HandleFileContract.FileData("bookshelf.json", file, "application/json") } } + R.id.menu_import_bookshelf -> importBookshelfAlert(groupId) R.id.menu_log -> showDialogFragment() } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/BookshelfFragment1.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/BookshelfFragment1.kt index e20efd85e..4ddb949ab 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/BookshelfFragment1.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/BookshelfFragment1.kt @@ -30,10 +30,18 @@ import kotlin.collections.set /** * 书架界面 */ -class BookshelfFragment1 : BaseBookshelfFragment(R.layout.fragment_bookshelf1), +class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1), TabLayout.OnTabSelectedListener, SearchView.OnQueryTextListener { + constructor(position: Int) : this() { + val bundle = Bundle() + bundle.putInt("position", position) + arguments = bundle + } + + override val position: Int get() = arguments?.getInt("position") ?: -1 + private val binding by viewBinding(FragmentBookshelf1Binding::bind) private val adapter by lazy { TabFragmentPageAdapter(childFragmentManager) } private val tabLayout: TabLayout by lazy { @@ -134,8 +142,8 @@ class BookshelfFragment1 : BaseBookshelfFragment(R.layout.fragment_bookshelf1), * 确定视图位置是否更改时调用 * @return POSITION_NONE 已更改,刷新视图. POSITION_UNCHANGED 未更改,不刷新视图 */ - override fun getItemPosition(`object`: Any): Int { - val fragment = `object` as BooksFragment + override fun getItemPosition(any: Any): Int { + val fragment = any as BooksFragment val position = fragment.position val group = bookGroups.getOrNull(position) if (fragment.groupId != group?.groupId) { diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BookshelfFragment2.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BookshelfFragment2.kt index 0b91c60e9..ede596d0e 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BookshelfFragment2.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BookshelfFragment2.kt @@ -42,10 +42,18 @@ import kotlin.math.max /** * 书架界面 */ -class BookshelfFragment2 : BaseBookshelfFragment(R.layout.fragment_bookshelf2), +class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2), SearchView.OnQueryTextListener, BaseBooksAdapter.CallBack { + constructor(position: Int) : this() { + val bundle = Bundle() + bundle.putInt("position", position) + arguments = bundle + } + + override val position: Int get() = arguments?.getInt("position") ?: -1 + private val binding by viewBinding(FragmentBookshelf2Binding::bind) private val bookshelfLayout by lazy { getPrefInt(PreferKey.bookshelfLayout) diff --git a/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt b/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt index 23fc4222c..04382a213 100644 --- a/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt @@ -24,6 +24,7 @@ import io.legado.app.lib.theme.primaryTextColor import io.legado.app.ui.book.explore.ExploreShowActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.main.MainActivity +import io.legado.app.ui.main.MainFragmentInterface import io.legado.app.utils.applyTint import io.legado.app.utils.cnCompare import io.legado.app.utils.setEdgeEffectColor @@ -42,8 +43,18 @@ import kotlinx.coroutines.launch /** * 发现界面 */ -class ExploreFragment : VMBaseFragment(R.layout.fragment_explore), - ExploreAdapter.CallBack, MainActivity.Callback { +class ExploreFragment() : VMBaseFragment(R.layout.fragment_explore), + MainFragmentInterface, + ExploreAdapter.CallBack, + MainActivity.Callback { + + constructor(position: Int) : this() { + val bundle = Bundle() + bundle.putInt("position", position) + arguments = bundle + } + + override val position: Int get() = arguments?.getInt("position") ?: -1 override val viewModel by viewModels() private val binding by viewBinding(FragmentExploreBinding::bind) diff --git a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt index 97e592a21..01bf7a37a 100644 --- a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt @@ -30,12 +30,29 @@ import io.legado.app.ui.config.ConfigActivity import io.legado.app.ui.config.ConfigTag import io.legado.app.ui.dict.rule.DictRuleActivity import io.legado.app.ui.file.FileManageActivity +import io.legado.app.ui.main.MainFragmentInterface import io.legado.app.ui.replace.ReplaceRuleActivity import io.legado.app.ui.widget.dialog.TextDialog -import io.legado.app.utils.* +import io.legado.app.utils.LogUtils +import io.legado.app.utils.getPrefBoolean +import io.legado.app.utils.observeEventSticky +import io.legado.app.utils.openUrl +import io.legado.app.utils.putPrefBoolean +import io.legado.app.utils.sendToClip +import io.legado.app.utils.setEdgeEffectColor +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.startActivity import io.legado.app.utils.viewbindingdelegate.viewBinding -class MyFragment : BaseFragment(R.layout.fragment_my_config) { +class MyFragment() : BaseFragment(R.layout.fragment_my_config), MainFragmentInterface { + + constructor(position: Int) : this() { + val bundle = Bundle() + bundle.putInt("position", position) + arguments = bundle + } + + override val position: Int get() = arguments?.getInt("position") ?: -1 private val binding by viewBinding(FragmentMyConfigBinding::bind) @@ -131,6 +148,7 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config) { WebService.stop(requireContext()) } } + "recordLog" -> LogUtils.upLevel() } } @@ -145,12 +163,15 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config) { "setting" -> startActivity { putExtra("configTag", ConfigTag.OTHER_CONFIG) } + "web_dav_setting" -> startActivity { putExtra("configTag", ConfigTag.BACKUP_CONFIG) } + "theme_setting" -> startActivity { putExtra("configTag", ConfigTag.THEME_CONFIG) } + "fileManage" -> startActivity() "readRecord" -> startActivity() "donate" -> startActivity() diff --git a/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt b/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt index 4d0f74306..af33c8149 100644 --- a/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt @@ -18,6 +18,7 @@ import io.legado.app.databinding.ItemRssBinding import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryTextColor +import io.legado.app.ui.main.MainFragmentInterface import io.legado.app.ui.rss.article.RssSortActivity import io.legado.app.ui.rss.favorites.RssFavoritesActivity import io.legado.app.ui.rss.read.ReadRssActivity @@ -25,7 +26,12 @@ import io.legado.app.ui.rss.source.edit.RssSourceEditActivity import io.legado.app.ui.rss.source.manage.RssSourceActivity import io.legado.app.ui.rss.source.manage.RssSourceViewModel import io.legado.app.ui.rss.subscription.RuleSubActivity -import io.legado.app.utils.* +import io.legado.app.utils.applyTint +import io.legado.app.utils.cnCompare +import io.legado.app.utils.openUrl +import io.legado.app.utils.setEdgeEffectColor +import io.legado.app.utils.splitNotBlank +import io.legado.app.utils.startActivity import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Job import kotlinx.coroutines.flow.catch @@ -36,9 +42,18 @@ import kotlinx.coroutines.launch /** * 订阅界面 */ -class RssFragment : VMBaseFragment(R.layout.fragment_rss), +class RssFragment() : VMBaseFragment(R.layout.fragment_rss), + MainFragmentInterface, RssAdapter.CallBack { + constructor(position: Int) : this() { + val bundle = Bundle() + bundle.putInt("position", position) + arguments = bundle + } + + override val position: Int get() = arguments?.getInt("position") ?: -1 + private val binding by viewBinding(FragmentRssBinding::bind) override val viewModel by viewModels() private val adapter by lazy { RssAdapter(requireContext(), this) }