gpt4 book ai didi

java - 如何在警报对话框与我的 fragment 之间进行通信?

转载 作者:行者123 更新时间:2023-12-02 09:51:40 24 4
gpt4 key购买 nike

我有一个名为 AlertDialogFragment 的类,它将用于在整个程序中需要时创建警报对话框。如果单击正按钮,创建对话框的 fragment 将调用一个函数;如果单击负按钮,则创建对话框的 fragment 将不调用任何函数。我对 Android 开发相当陌生,感谢任何提示或帮助。

这是我的 AlertDialogFragment:

class AlertDialogFragment : DialogFragment() {


companion object {
private val TAG = "AlertDialogFragment"


fun newInstance(message: String, positiveBtnText: String, negativeBtnText: String): AlertDialogFragment {
val fragment = AlertDialogFragment()
fragment.isCancelable = false

val args = Bundle()
args.putString("aMessage", message)
args.putString("aPositiveBtnText", positiveBtnText)
args.putString("aNegativeBtnText", negativeBtnText)

fragment.arguments = args
return fragment
}


}


override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
Log.d(TAG, "onCreateDialog called")
super.onCreateDialog(savedInstanceState)
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setMessage(arguments?.getString("aMessage"))
.setPositiveButton(arguments?.getString("aPositiveBtnText"), DialogInterface.OnClickListener { dialog, id ->
Log.d(TAG, "Yes!")
})
.setNegativeButton(arguments?.getString("aNegativeBtnText"), DialogInterface.OnClickListener { dialog, id ->
Log.d(TAG, "Dismiss!")
})

Log.d(TAG, "onCreateDialog ending")
builder.create()
} ?: throw IllegalStateException("Activity can not be null")
}


}

这是我尝试初始化警报对话框并设置目标 fragment :

try {
AlertDialogFragment alertDialogFragment = new AlertDialogFragment().Companion.newInstance(
"Would you like to continue?",
"Yes",
"Dismiss");
alertDialogFragment.setTargetFragment(this, TARGET_FRAGMENT_REQUEST_CODE);
alertDialogFragment.show(getActivity().getSupportFragmentManager(), "dialog");
}catch (Exception e){
e.printStackTrace();
}

预先感谢您的帮助!

编辑:我使用 kotlin 作为警报对话框,初始化它的 fragment 是用 java 编写的。

最佳答案

您可以检索传入的目标 fragment 和请求代码,然后使用它来调用onActivityResult:

targetFragment?.let { fragment ->
fragment.onActivityResult(fragment.targetRequestCode, Activity.RESULT_OK, null)
}

在你的函数中:

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
Log.d(TAG, "onCreateDialog called")
super.onCreateDialog(savedInstanceState)
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setMessage(arguments?.getString("aMessage"))
.setPositiveButton(arguments?.getString("aPositiveBtnText"), DialogInterface.OnClickListener { dialog, id ->
Log.d(TAG, "Yes!")
targetFragment?.let { fragment ->
fragment.onActivityResult(fragment.targetRequestCode, Activity.RESULT_OK, null)
}
})
.setNegativeButton(arguments?.getString("aNegativeBtnText"), DialogInterface.OnClickListener { dialog, id ->
Log.d(TAG, "Dismiss!")
})

Log.d(TAG, "onCreateDialog ending")
builder.create()
} ?: throw IllegalStateException("Activity can not be null")
}

在启动 fragment 中,您覆盖 onActivityResult 并处理返回的值。

请注意,如果重新创建 fragment ,您将必须重新分配目标 fragment 。

关于java - 如何在警报对话框与我的 fragment 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56278246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com