Можем ли мы получить текстовое значение ячейки для сетки, созданной динамически в Android / Kotlin? - PullRequest
1 голос
/ 10 марта 2019

Это динамически создаваемая сетка 6 * 6. Я хочу получить значение текста в каждой ячейке, чтобы, когда пользователь щелкает ячейку с определенным текстом (например, животным) на доске, эта ячейка была отключена, и в этой ячейке нельзя было нажимать.

Как я могу получить текстовое значение динамически созданной ячейки в gridlayout?

Код для создания платы (acticity.kt):

 fun createBoard(context: Context, board: GridLayout, size: Int, listofThings: List<String>) {
        destroyBoard()
        board.columnCount = size
        board.rowCount = size
        var iterator = 0
        for(col in 1..size) {
            for (row in 1..size) {
                cell = RelativeLayout(context)
                val cellSpecifications = { GridLayout.spec(GridLayout.UNDEFINED, GridLayout.FILL, 1f) }
                val params = GridLayout.LayoutParams(cellSpecifications(), cellSpecifications())
                params.width = 0
                cell.layoutParams = params
                cell.setBackgroundResource(R.drawable.bordered_rectangle)
                cell.gravity = Gravity.CENTER
                cell.setPadding(5, 0, 5, 0)

                text = TextView(context)
                text.text = people[iterator++]
                words.add(text.text as String)
                
                text.maxLines = 5
                text.setSingleLine(false)
                text.gravity = Gravity.CENTER
                text.setTextColor(0xFF000000.toInt())

                cell.addView(text)
                board.addView(cell)
                cells.add(GameCell(cell, text, false, row, col) {  })
            }
        }
    }

Код в файле Activity.xml:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.GridLayout
            android:id="@+id/grid"
            android:layout_gravity="center"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_weight="1"
          >

        </android.support.v7.widget.GridLayout>
        
</LinearLayout>

1 Ответ

1 голос
/ 11 марта 2019

Вы можете установить прослушиватель на каждую ячейку в GridLayout после вызова метода createBoard.

val board = findViewById<android.support.v7.widget.GridLayout>(R.id.grid)

createBoard(this, board, 3, listOf<String>())

val childCount = board.childCount
for (i in 0 until childCount) {
    val cell = board.getChildAt(i) as RelativeLayout
    cell.setOnClickListener { view ->
        val textView = (view as RelativeLayout).getChildAt(0) as TextView
        val textValue = textView.text
        // Process textValue here
        Toast.makeText(this, textValue, Toast.LENGTH_SHORT).show()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...