如何正确关闭对话框片段



我尝试了两种解决方案来关闭fragment,但都不起作用。第一个解决方案:-

binding.closeBtn.setOnClickListener {
dismiss()
}

当我关闭对话框时,此解决方案的背面是完全空白的。

第二个解决方案:-

close_btn.setOnClickListener {
requireActivity().onBackPressed()
}

当我关闭对话框时,我的完整应用程序将关闭。

你能帮我解决我的问题吗

class CongratulationsDialog : DialogFragment() {
lateinit var bid :String
lateinit var sharedPreference: SharedPreference
var mLogoProgressDialog: ProgressDialog? = null
var text : String = ""
var uid :String = ""
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val binding = DataBindingUtil.inflate<CongratulationsDialogBinding>(
inflater,
R.layout.congratulations_dialog,
container,
false)
dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog?.setContentView(R.layout.congratulations_dialog)
dialog?.window?.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)
sharedPreference = activity?.let { SharedPreference(it) }!!
bid = sharedPreference.getValueString("sendBid").toString()
text = sharedPreference.getValueString("token").toString()
uid = sharedPreference.getValueString("login_uid").toString()
Log.d("checkLoginId",""+uid+"Bid"+bid)
initializeLogoProgressDialog()
loadBettingStatus(bid,text,binding)
binding.closeBtn.setOnClickListener {
dismiss()
}
binding.createNewBoastButton.setOnClickListener {
view?.let { it1 ->
Navigation.findNavController(it1)
.navigate(R.id.action_congratulationsDialog_to_newBoastFragment)
}
}
return binding.root
}
private fun initializeLogoProgressDialog() {
if (mLogoProgressDialog == null) {
Log.w("PBFX", "initializeLogoProgressDialog called - mLogoProgressDialog = NULL")
} else {
Log.w("PBFX", "initializeLogoProgressDialog called - mLogoProgressDialog NOT NULL")
}
if (mLogoProgressDialog == null) {
dismissLogoProgressDialog()
mLogoProgressDialog = ProgressDialog(requireContext())
mLogoProgressDialog!!.show()
mLogoProgressDialog!!.setCancelable(false)
mLogoProgressDialog!!.getWindow()!!
.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
mLogoProgressDialog!!.setContentView(R.layout.progress_bar)
}
}
private fun loadBettingStatus(bid: String, text: String, binding: CongratulationsDialogBinding) {
val apiInterface = RetrofitService.api.getInviteesDetails(bid,"Bearer "+text)
apiInterface.enqueue( object : Callback<Invitees> {
override fun onResponse(call: Call<Invitees>?, response: Response<Invitees>) {
if (response.isSuccessful) {
dismissLogoProgressDialog()
if (response?.body() != null) {
if(response.body()!!.data.status.equals("completed")) {
binding.textView7.text =response.body()!!.data.name
if (uid.equals(response.body()!!.data.betWinner.uid)) {
binding.youTxt.setText("You")
if(response.body()!!.data.mode.equals("task")){
binding.textView10.setText(response.body()!!.data.taskTitle)
}else{
binding.textView10.setText("$"+response.body()!!.data.value)
}
} else {
dismissLogoProgressDialog()
binding.youTxt.setText(response.body()!!.data.betWinner.name)
if(response.body()!!.data.mode.equals("task")){
binding.textView10.setText(response.body()!!.data.taskTitle)
}else{
binding.textView10.setText("$"+response.body()!!.data.value)
}
}
}
}
}else{
dismissLogoProgressDialog()
}
}
override fun onFailure(call: Call<Invitees>?, t: Throwable?) {
if (t != null) {
dismissLogoProgressDialog()
Log.d("gettingFailure",""+t.message)
}
}
})
}
private fun dismissLogoProgressDialog() {
if (mLogoProgressDialog != null) {
mLogoProgressDialog!!.dismiss()
}
mLogoProgressDialog = null
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// close_btn.setOnClickListener {
//     requireActivity().onBackPressed()
// }
}
override fun getTheme() = R.style.RoundedCornersDialog
}

我认为关闭对话框的更好方法是这样。

Fragment frag = getSupportFragmentManager().findFragmentByTag("fragment_dialog");
if (frag != null) {
DialogFragment df = (DialogFragment) frag;
df.dismiss();
}

最新更新