8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在对话框中使用附加不会让片段上的覆盖方法被调用

CraftyB 1月前

15 0

我正在使用一个带有点击功能的对话框,我想从配置更改中保存“onAttach”单击的侦听器,问题是它阻止了我的

我正在使用一个带有点击的对话框,我想从配置更改中保存“onAttach”上点击的侦听器,问题是它阻止调用我片段上的侦听器的覆盖方法。当我单击按钮时,该方法会调用 onAttach 点击,配置更改时也是如此。

我不想使用 viewmodel 来做这件事,我只是不知道如何解决这个问题,如果我删除 onAttach 中的点击,它仍然不起作用。这是我的代码:

class RedeemGiftCardDialog: DialogFragment() {

    private lateinit var binding: DialogRedeemGiftCardBinding
    var listener: RedeemGiftCardDialogListener? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setStyle(STYLE_NORMAL, R.style.Theme_AppCompat_Light_Dialog_Alert)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = inflate(inflater, R.layout.dialog_redeem_gift_card)
        dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        return binding.root
    }


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.textFieldCode.editText?.showKeyboard()

        binding.buttonContinue.setOnClickListener {
            val text = binding.textFieldCode.editText?.text.toString()
            if (text.isBlank() || text.length < 6) {
                Toast.makeText(context, "Shënoni kodin për të vazhduar!", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }
            isLoading(true)
            listener?.onRedeemClicked(text)
        }
    }

    fun isLoading(loading: Boolean) {
        binding.buttonContinue.isEnabled = !loading
        binding.progressBar.isVisible = loading
        binding.buttonContinue.text = if (loading) "" else "Aktivizo"
        binding.buttonContinue.hideKeyboard()
    }
}

interface RedeemGiftCardDialogListener {
    fun onRedeemClicked(code: String)
}

//The fragment:


@AndroidEntryPoint
class ProfileFragment : BaseFragment(), ResetBottomSheetListener, RedeemGiftCardDialogListener {
 binding.redeemGiftCardLayout.setOnClickListener {
            val fm = activity?.supportFragmentManager ?: return@setOnClickListener
            val redeemDialog = RedeemGiftCardDialog()
            redeemDialog.listener = this
            if (!redeemDialog.isAdded) {
                redeemDialog.show(fm, redeemDialog.tag)
            }
        }

}

  override fun onRedeemClicked(code: String) {
        Log.d("Dialog","clicked")
       membershipViewModel.activateGift(code)
    }
帖子版权声明 1、本帖标题:在对话框中使用附加不会让片段上的覆盖方法被调用
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由CraftyB在本站《kotlin》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我不确定我是否 100% 理解了这个问题。我认为您的问题是,在配置更改后重新创建片段时,侦听器未设置在对话框片段中,这就是点击侦听器不起作用的原因。

    不要设置侦听器,而是尝试使用片段结果侦听器,如文档中所述,即使在配置更改后它也能工作:

    https://developer.android.com/guide/fragments/communicate#fragment-result

返回
作者最近主题: