Ich*_*cta 9 android lazy-initialization android-fragments android-dialogfragment kotlin
我有一个对话框片段,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是:片段与片段管理器无关。
我也尝试过 postDelayed dimiss,但仍然崩溃。
加载对话框.kt
class LoadingDialog(private val fm: FragmentManager) : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
isCancelable = false
return inflater.inflate(R.layout.dialog_loading, container, false)
}
fun showDialog(tag: String? = null) {
show(fm, tag)
}
fun closeDialog() {
dismiss()
}
}
Run Code Online (Sandbox Code Playgroud)
LazyDialog.kt
class LazyDialog<T : DialogFragment>(private val type: Class<T>, private val fm: FragmentManager) :
Lazy<T> {
private var dialog: T? = null
override val value: T
get() {
return when {
type.isAssignableFrom(LoadingDialog::class.java) -> {
LoadingDialog(fm).also {
dialog = it as T
} as T
}
else -> throw IllegalArgumentException("Unknown class : ${type.name}")
}
}
override fun isInitialized(): Boolean = dialog != null
}
Run Code Online (Sandbox Code Playgroud)
扩展.kt
inline fun <reified T : DialogFragment> FragmentActivity.loadingDialog(): Lazy<T> {
return LazyDialog(T::class.java, supportFragmentManager)
}
Run Code Online (Sandbox Code Playgroud)
登录活动.kt
private val loadingDialog: LoadingDialog by loadingDialog()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3661 次 |
| 最近记录: |