Anko生成EditText并将它们的onClickListener移至另一个EditText

时间:2018-08-28 10:28:19

标签: android kotlin anko

我想使用Anko(Android Kotlin)构建一个填字游戏,它将生成EditText并将其赋予onCLickListener以便将(垂直/水平)移动到另一个EditText。我成功生成了EditText,但不知道如何让它们的onClickListener移至另一个EditText。

这就是我所做的

class CrosswordActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        CrosswordActivityUI().setContentView(this)
    }
}

class CrosswordActivityUI : AnkoComponent<CrosswordActivity> {
    private val crossword = arrayOf(
            arrayOf("w", "o", "r", "k"),
            arrayOf("o", "", "u", ""),
            arrayOf("r", "u", "n", ""),
            arrayOf("k", "", "", "")
    )

    override fun createView(ui: AnkoContext<CrosswordActivity>) = ui.apply {
        verticalLayout {
            for (rows in crossword) {
                linearLayout {
                    for (column in rows) {
                        editText {
                            visibility = if (column.isNotEmpty()) View.VISIBLE else View.INVISIBLE
                            onClick {

                            }
                        }
                    }
                }
            }
        }
    }.view
}

我已经使用React Native构建了游戏,只是试图将其重写为Native Android。我是本机Android开发领域的新手,请提前告知我是否还有其他方法!

1 个答案:

答案 0 :(得分:1)

将导航逻辑如此大量地构建到Views中可能不太好...但是,如果您要遵循以下路线:如果您可以扩展循环以获取索引,则每个编辑文本的onClick都可以使用这些索引,以确定接下来要关注的EditText。

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

您还必须建立一个数据结构来记录每个单元格的EditText,或者使用GridLayout。这样,每个EditText的onClick代码就可以查找其邻居。

所以您有伪代码,如:

onClick {
   val nextX = f(x)
   val nextY = g(y)
   editTextGrid[nextX][nextY].requestFocus()
}