package com.sw.platecabinet.fragment import android.app.Dialog import android.os.Bundle import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.viewbinding.ViewBinding import com.sw.platecabinet.member.R import com.sw.platecabinet.view.CustomLoadingDialog import com.sw.platecabinet.viewmodel.SettingViewModel import kotlinx.coroutines.launch abstract class BaseFragment( private val bindingInflater: (inflater: LayoutInflater, parent: ViewGroup?, attachToParent: Boolean) -> VB ) : Fragment() { private var _binding: VB? = null protected val binding get() = _binding!! private var mDialogWaiting: CustomLoadingDialog? = null protected val viewModel by viewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = bindingInflater(inflater, container, false) initialize() registerDataChange() return binding.root } /** * 注册数据变化监听 */ open fun registerDataChange() { lifecycleScope.launch { viewModel.showLoading.collect { if (it) { showWaitingDialog("") } else { hideWaitingDialog() } } } } abstract fun initialize() /** * 显示等待提示框 */ fun showWaitingDialog(tip: String?): Dialog? { hideWaitingDialog() val view = View.inflate(requireContext(), R.layout.dialog_waiting, null) if (!TextUtils.isEmpty(tip)) (view.findViewById(R.id.tvTip) as TextView).text = tip mDialogWaiting = CustomLoadingDialog(requireContext(), view, R.style.MyDialog) mDialogWaiting!!.show() mDialogWaiting!!.setCancelable(true) return mDialogWaiting } /** * 隐藏等待提示框 */ fun hideWaitingDialog() { mDialogWaiting?.dismiss() mDialogWaiting = null } override fun onDestroyView() { super.onDestroyView() _binding = null } }