在Kotlin安装和Getters

我试图从一个按钮被按下时,从另一个活动更改trx的值,我试过的是

ScoresActivity.kt

 class ScoresActivity : AppCompatActivity(), View.OnClickListener { var trx = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_scores) } } 

其他职业:

 override fun onClick(p0: View?) { when(p0){ button_1 -> { ScoresActivity().trx = 5 } } 

但是,只要我打印trx的值是0。

问题:

当您调用ScoresActivity()您将创建一个ScoresActivity类的新实例。 因为你不保存这个实例,所以trx值的设置丢失了。

解决方案:我不确定trx应该代表什么,但是由于Activity名称给出了一个提示,我认为它是某种分数(然后可以在全球范围内使用)。

一种方法是将trx放入ScoresActivity本身的companion object中。

 class ScoresActivity: Activity() { // ... companion object { var trx: Int = 0 } } 

用法(来自任何活动):

 ScoresActivity.trx = 5 

其他方式是另一个类是一个单身(Kotlin中的object ),代表构成游戏状态的值或通过活动之间的意图传递trx值。

  1. 你不应该使用默认的构造函数来创建Activity对象。 阅读关于android核心组件。
  2. 您可以存储为静态值。 把它放在对象内,使其成为类variables。 阅读关于实例/类variables。