【问题标题】:Adding data to existing row in new column for a TableLayout - Kotlin将数据添加到 TableLayout 的新列中的现有行 - Kotlin
【发布时间】:2019-03-27 21:49:37
【问题描述】:

所以我有这个界面,我在单击按钮时将新项目添加到 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)

}

【问题讨论】:

    标签: android kotlin tablelayout


    【解决方案1】:

    所以我实际上解决了它。修复是在某些条件下添加新的 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)
        }
    
    }
    

    【讨论】:

      【解决方案2】:

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

      参考this doc后,我看到您可以在使用“addView”方法时显式设置索引。

      在添加视图之前使用 if 语句检查 layoutParams.column 是否 == 2,如果是,则将 addView 的索引值设置为 player.size - 5。

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

      即。 player.size 为 20,下一个添加的玩家将从第 5 列开始。要让这个播放器进入第 1 行或索引 0,您需要从 player.size 中减去 20,如果您将 5 乘以列数,然后再减去 5,您将很容易得到这个结果。

      【讨论】:

      • 谢谢!我能够从另一个索引开始,但问题仍然是创建了新行。我试图做一个解决方法,当大小> 5时我清除整个表。它仍然不能解决问题,如果 removeAllViews 像我想要的那样工作,idk。请参阅下面的代码。
      • 嘿,请参阅我的最新帖子以获取解决方案。
      • @axlb 这似乎是一个不错的小工作!如果我今天有时间,我会再查看一下文档,但我不明白为什么这不能作为永久修复:) 很好的发现!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      相关资源
      最近更新 更多