修改了用于回答测验问题的文本输入.如何将文本从一组按钮移动到一组文本视图,每次一个字母



退休英语教授尝试Kotlin/Android。以下是我要做的:

在智力竞赛应用程序中,用户可以获得一条要解决的线索;他/她会看到一个按钮网格,每个按钮的文本都是从一个打乱的列表中提取的一个字母,该列表包含正确答案所需的所有字母,外加几个随机的额外字母。按下按钮将相应的字母转移到答案网格的第一个空文本视图。按下另一个按钮将其字母输入下一个文本视图,依此类推

到目前为止,我可以在第一个文本视图中选择第一个字母,但我似乎不知道如何确保按下下一个按钮会将其文本转移到下一个可用的文本视图。我花了好几天时间在Kotlin/Java网站上寻找例子,但运气不好。

不要求任何人为我编写代码,只是建议我如何最好地思考下一步,其中的逻辑让我难以捉摸。当然,欢迎使用示例。Chiding告诫,不那么多。

以下是.kt对这一点的尝试:

package com.example.letterbuttons

import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.example.letterbuttons.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
var titleString = ("HERZOGMELSOCNA")

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val a = binding.button1
val b = binding.button2
val c = binding.button3
val d = binding.button4
val e = binding.button5
val f = binding.button6
val g = binding.button7
val h = binding.button8
val i = binding.button9
val j = binding.button10
val k = binding.button11
val m = binding.button12
val n = binding.button13
val o = binding.button14

val letterChoices = arrayOf(a, b, c, d, e, f, g, h, i, j, k, m, n, o)
titleString = titleString
.toList()
.shuffled()
.joinToString(separator = "")

for ((index, element) in titleString.withIndex()) {
letterChoices[index].text = ("$element")
}
listOf(a, b, c, d, e, f, g, h, i, j, k, m, n, o).forEach {
it.setOnClickListener(::click)
}

}

fun click(view: View) {
with(view as Button) {
val tv1 = binding.textView1
val tv2 = binding.textView2
val tv3 = binding.textView3
val tv4 = binding.textView4
val tv5 = binding.textView5
val tv6 = binding.textView6
val tv7 = binding.textView7
val tv8 = binding.textView8
val tv9 = binding.textView9
val tv10 = binding.textView10
val tv11 = binding.textView11
val tv12 = binding.textView12
val tv13 = binding.textView13
val tv14 = binding.textView14
val tv15 = binding.textView15
val tv16 = binding.textView16
val tv17 = binding.textView17
val tv18 = binding.textView18
val answerChoices = arrayOf(
tv1,
tv2,
tv3,
tv4,
tv5,
tv6,
tv7,
tv8,
tv9,
tv10,
tv11,
tv12,
tv13,
tv14,
tv15,
tv16,
tv17,
tv18
)

for ((i, element) in answerChoices.withIndex()) {

var text = view.text
var tv = answerChoices[0]
tv.text = text

//then what? (clearly not this):
//   var nextTv = answerChoices[+1]
//   nextTv.requestFocus()
//   nextTv.text = text
}
}

您已经有了所有按钮和textViews的数组。你所要做的就是代替这个

listOf(a, b, c, d, e, f, g, h, i, j, k, m, n, o).forEach {
it.setOnClickListener(::click)
}

您可以在这里使用按钮数组,并将索引映射到textview。

for ((i, element) in letterChoices.withIndex()) {
element.onClickListener(){
answerChoices[i].text = element.text
}
}

附言:这只是一个伪代码。

相关内容

最新更新