如何使用来自弹出编辑文本字段的数据更新 textview?

How can I update textview with a data coming from within a pop-up edittext field?

首先,我真的是Kotlin和Android编程的初学者,所以如果我的问题不是很聪明,请原谅。

我正在尝试构建一个应用程序来跟踪我在名为 Terraforming Mars:Ares Expedition 的棋盘游戏中的资源。游戏中,每位玩家拥有3种收集table资源; MC(金钱)、热量和植物。为了增加库存和收入,我使用这些彩色按钮使其类似于实体游戏方块。但是,在支出方面,我为每个资源实现了支出按钮,单击时会出现一个弹出窗口 window。我已经关注了一个 youtube 视频来实现弹出窗口,以及绑定到它的新 class。

问题是,我无法更新主 table(MC 的库存部分)中的金额。这是我的弹出窗口 class:

package com.example.aresboard

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.DialogFragment
import com.example.aresboard.databinding.ActivityMainBinding
import com.example.aresboard.databinding.SpendPopupBinding
import java.lang.Integer.parseInt

class SpendDialog : DialogFragment() {

    private lateinit var binding: SpendPopupBinding
    private lateinit var actBinding: ActivityMainBinding

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = SpendPopupBinding.inflate(layoutInflater)
        actBinding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root

        binding.spendButton.setOnClickListener {
            var amount = parseInt(binding.howMuch.text.toString())
            var mainObject = MainActivity()
            mainObject.spendMcAmount(amount, actBinding)
            Toast.makeText(context, "You spent $amount", Toast.LENGTH_LONG).show()
            dismiss()
        }
        return view
    }
}

这是函数“spendMcAmount(amount, actBinding)”,我正在尝试 运行 在我的 MainActivity class.

fun spendMcAmount(amount: Int, binding: ActivityMainBinding) {
    mcStock = mcStock-amount
    binding.mcStockTv.setText("" + mcStock)
}

我有非常相似的功能来增加 MC 库存,运行当在 MC 行中单击 +1、+5 或 +10 按钮时。他们工作得很好。唯一的区别是,这些按钮没有弹出 windows,因此它们 运行 在 MainActivity class 中。这是将 MC 增加一的函数:

fun mcOne(view: View) {
    mcStock++
    binding.mcStockTv.setText("" + mcStock)
}

我还尝试直接从 SpendDialog class 设置 mcStockTextView.text,它位于我的 MainActivity 布局中,但也没有成功。当我打印 mcStockTextView.text 的值时,它看起来是正确的,但显示器不会显示更新后的值。因此,我尝试了这个问题中的内容,即创建 MainActivity class 的对象,并尝试调用该 class 中的函数。仍然没有运气。

下面是我的布局:

MainActivity Layout

SpendDialog Layout

你不需要 ActivityMainBindingDialogFragment

创建接口

interface SpendListener {

    fun onSpend(amount: Int)

}

DialogFragment声明SpendListener

private lateinit var spendListener: SpendListener

public方法初始化接口

fun setupListener(spendListener: SpendListener) {
    this.spendListener = spendListener
}

现在在关闭对话框之前使用接口将数据发送到 activity

spendListener.onSpend(10)

并在您打开弹出窗口的 activity 中,设置侦听器以在

之后更新 UI
dialog.show(this, "TAG")
dialog.setupListener(object: SpendListener {
    override fun onSpend(amount: Int) {
        yourTextView.text = amount.toString()
    }
})