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.rss.RssFragment
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 kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlin.collections.set
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
@@ -446,7 +452,11 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
}
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
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.main.bookshelf.BaseBookshelfFragment
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 kotlin.collections.set
@@ -168,8 +171,15 @@ class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1)
}
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]
/**
* 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
return fragment
}
@@ -17,8 +17,10 @@ import io.noties.markwon.Markwon
import io.noties.markwon.ext.tables.TablePlugin
import io.noties.markwon.html.HtmlPlugin
import io.noties.markwon.image.glide.GlideImagesPlugin
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
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")
val content = IntentData.get(it.getString("content")) ?: ""
when (it.getString("mode")) {
Mode.MD.name -> binding.textView.post {
Markwon.builder(requireContext())
.usePlugin(GlideImagesPlugin.create(requireContext()))
.usePlugin(HtmlPlugin.create())
.usePlugin(TablePlugin.create(requireContext()))
.build()
.setMarkdown(binding.textView, content)
Mode.MD.name -> viewLifecycleOwner.lifecycleScope.launch {
binding.textView.text = withContext(IO) {
Markwon.builder(requireContext())
.usePlugin(GlideImagesPlugin.create(requireContext()))
.usePlugin(HtmlPlugin.create())
.usePlugin(TablePlugin.create(requireContext()))
.build()
.toMarkdown(content)
}
}
Mode.HTML.name -> binding.textView.setHtml(content)
@@ -12,6 +12,7 @@ import androidx.annotation.DrawableRes
import androidx.core.content.edit
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import io.legado.app.R
import io.legado.app.ui.widget.dialog.TextDialog
@@ -83,4 +84,7 @@ inline fun <reified T : Activity> Fragment.startActivity(
fun Fragment.showHelp(fileName: String) {
val mdText = String(requireContext().assets.open("web/help/md/${fileName}.md").readBytes())
showDialogFragment(TextDialog(getString(R.string.help), mdText, TextDialog.Mode.MD))
}
}
val Fragment.isCreated
get() = lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)