将数据添加到TableLayout的新列中的现有行-Kotlin

时间:2018-10-23 15:27:43

标签: android kotlin tablelayout

所以我有这个界面,单击该按钮时,我将新项目添加到TableLayout中。 See this picture

问题在于您在上图中看到的问题,而不是在第三列的顶部添加新项,而不是在第三列中将其添加为新行。因此,当listsize大于5时,新项目应将线性添加到第三列的第二列。我只能通过添加新行来解决。我不知道如何解决这个问题。

这是代码

fun addPlayerToTable(player: String) {

    //Create new Row and TextView
    val newRow = TableRow(this)
    val newText = TextView(this)

    var layoutParams = TableRow.LayoutParams(
        TableRow.LayoutParams.WRAP_CONTENT,
        TableRow.LayoutParams.WRAP_CONTENT)
    //Set text on ViewText
    newText.text = player

    if(players.size > 5){

        layoutParams.column = 2

    }else {
        layoutParams.column = 1
    }

    //Add TextViews and Rows dynamically
    newRow.addView(newText, layoutParams)
    table!!.addView(newRow)

}

2 个答案:

答案 0 :(得分:0)

https://developer.android.com/reference/android/widget/TableLayout

引用此文档后,我看到您可以在使用“ addView”方法时显式设置索引。

在添加视图之前使用if语句来检查layoutParams.column == 2,如果它确实将addView的索引值设置为players.size-5。

编辑:如果希望每5个玩家有一个新列,则将变量设置为5,再乘以列数,然后使用该值从players.size中减去。

即。 players.size为20,添加的下一个玩家将从第5列开始。要使该玩家进入第1行或索引0,您需要从players.size中减去20,如果您将5乘以列数,然后再减去5,您将轻松获得此结果。

答案 1 :(得分:0)

所以我实际上解决了它。该修复程序是根据某些条件添加了新的TextViews和TableRows。还要从索引1-6中删除视图,因为我们不想删除0索引。也许可以更简单地完成它。

 fun addPlayerToTable(player: String) {

    //Create new Row and TextView
    var newRow = TableRow(this)
    var newText = TextView(this)
    var list = mutableListOf<TableRow>()
    var texts = mutableListOf<TextView>()

    if(players.size > 5){

        for(i in 0 until players.size){
            list.add(TableRow(this))
            texts.add(TextView(this))
            texts[i].text = players[i]
        }
    }

    var layoutParams = TableRow.LayoutParams(
        TableRow.LayoutParams.WRAP_CONTENT,
        TableRow.LayoutParams.WRAP_CONTENT)
    layoutParams.column = 1
    //Set text on ViewText
    newText.text = player

    if(players.size > 5){

        for(i in 1 until 6){
            table!!.removeViewAt(1)

        }
        for(i in 0 until 5){
            if(i + 5 >= players.size){
                list[i].addView(texts[i], layoutParams)
                table!!.addView(list[i])
            }
            else{
                list[i].addView(texts[i], layoutParams)
                list[i].addView(texts[i+5], layoutParams)
                table!!.addView(list[i])
            }

        }

    }else {

        //Add TextViews and Rows dynamically
        newRow.addView(newText, layoutParams)
        table!!.addView(newRow)
    }

}