This commit is contained in:
Horis
2024-08-19 17:53:04 +08:00
parent 177b877963
commit ec22152e37
4 changed files with 40 additions and 12 deletions
@@ -43,11 +43,17 @@ import io.legado.app.ui.main.explore.ExploreFragment
import io.legado.app.ui.main.my.MyFragment import io.legado.app.ui.main.my.MyFragment
import io.legado.app.ui.main.rss.RssFragment import io.legado.app.ui.main.rss.RssFragment
import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.utils.* import io.legado.app.utils.hideSoftInput
import io.legado.app.utils.isCreated
import io.legado.app.utils.observeEvent
import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlin.collections.set
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
@@ -446,7 +452,11 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} }
override fun instantiateItem(container: ViewGroup, position: Int): Any { override fun instantiateItem(container: ViewGroup, position: Int): Any {
val fragment = super.instantiateItem(container, position) as Fragment var fragment = super.instantiateItem(container, position) as Fragment
if (fragment.isCreated && getItemPosition(fragment) == POSITION_NONE) {
destroyItem(container, position, fragment)
fragment = super.instantiateItem(container, position) as Fragment
}
fragmentMap[getId(position)] = fragment fragmentMap[getId(position)] = fragment
return fragment return fragment
} }
@@ -22,7 +22,10 @@ import io.legado.app.ui.book.group.GroupEditDialog
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
import io.legado.app.ui.main.bookshelf.BaseBookshelfFragment import io.legado.app.ui.main.bookshelf.BaseBookshelfFragment
import io.legado.app.ui.main.bookshelf.style1.books.BooksFragment import io.legado.app.ui.main.bookshelf.style1.books.BooksFragment
import io.legado.app.utils.* import io.legado.app.utils.isCreated
import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlin.collections.set import kotlin.collections.set
@@ -168,8 +171,15 @@ class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1)
} }
override fun instantiateItem(container: ViewGroup, position: Int): Any { override fun instantiateItem(container: ViewGroup, position: Int): Any {
val fragment = super.instantiateItem(container, position) as BooksFragment var fragment = super.instantiateItem(container, position) as BooksFragment
val group = bookGroups[position] val group = bookGroups[position]
/**
* Activity recreate 会复用之前的 Fragment,不正确的需要需要重新创建
*/
if (fragment.isCreated && getItemPosition(fragment) == POSITION_NONE) {
destroyItem(container, position, fragment)
fragment = super.instantiateItem(container, position) as BooksFragment
}
fragmentMap[group.groupId] = fragment fragmentMap[group.groupId] = fragment
return fragment return fragment
} }
@@ -17,8 +17,10 @@ import io.noties.markwon.Markwon
import io.noties.markwon.ext.tables.TablePlugin import io.noties.markwon.ext.tables.TablePlugin
import io.noties.markwon.html.HtmlPlugin import io.noties.markwon.html.HtmlPlugin
import io.noties.markwon.image.glide.GlideImagesPlugin import io.noties.markwon.image.glide.GlideImagesPlugin
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class TextDialog() : BaseDialogFragment(R.layout.dialog_text_view) { class TextDialog() : BaseDialogFragment(R.layout.dialog_text_view) {
@@ -67,13 +69,15 @@ class TextDialog() : BaseDialogFragment(R.layout.dialog_text_view) {
binding.toolBar.title = it.getString("title") binding.toolBar.title = it.getString("title")
val content = IntentData.get(it.getString("content")) ?: "" val content = IntentData.get(it.getString("content")) ?: ""
when (it.getString("mode")) { when (it.getString("mode")) {
Mode.MD.name -> binding.textView.post { Mode.MD.name -> viewLifecycleOwner.lifecycleScope.launch {
binding.textView.text = withContext(IO) {
Markwon.builder(requireContext()) Markwon.builder(requireContext())
.usePlugin(GlideImagesPlugin.create(requireContext())) .usePlugin(GlideImagesPlugin.create(requireContext()))
.usePlugin(HtmlPlugin.create()) .usePlugin(HtmlPlugin.create())
.usePlugin(TablePlugin.create(requireContext())) .usePlugin(TablePlugin.create(requireContext()))
.build() .build()
.setMarkdown(binding.textView, content) .toMarkdown(content)
}
} }
Mode.HTML.name -> binding.textView.setHtml(content) Mode.HTML.name -> binding.textView.setHtml(content)
@@ -12,6 +12,7 @@ import androidx.annotation.DrawableRes
import androidx.core.content.edit import androidx.core.content.edit
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import io.legado.app.R import io.legado.app.R
import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.TextDialog
@@ -84,3 +85,6 @@ fun Fragment.showHelp(fileName: String) {
val mdText = String(requireContext().assets.open("web/help/md/${fileName}.md").readBytes()) val mdText = String(requireContext().assets.open("web/help/md/${fileName}.md").readBytes())
showDialogFragment(TextDialog(getString(R.string.help), mdText, TextDialog.Mode.MD)) showDialogFragment(TextDialog(getString(R.string.help), mdText, TextDialog.Mode.MD))
} }
val Fragment.isCreated
get() = lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)