如何使用来自弹出编辑文本字段的数据更新 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
你不需要 ActivityMainBinding
在 DialogFragment
创建接口
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()
}
})
首先,我真的是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
你不需要 ActivityMainBinding
在 DialogFragment
创建接口
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 中,设置侦听器以在
之后更新 UIdialog.show(this, "TAG")
dialog.setupListener(object: SpendListener {
override fun onSpend(amount: Int) {
yourTextView.text = amount.toString()
}
})