动态数组 TextView 不显示

Dynamic Array TextView is not displaying

我正在尝试在数组中显示多个文本视图。它应该首先显示输入值的提示,然后单击它允许您输入值,完成后,屏幕会显示该值以及下面的另一个字段以输入下一个值

Header----总计

Header----总计

Header----总计

但是下面的代码没有显示新的文本视图。 textview 是可点击的,并且应该根据数组的大小显示在另一个下方。不确定为什么此代码不起作用。我使用 RelativeLayout 显示动态视图

val itemTitle = arrayOfNulls<TextView>(size)
        val itemValue = arrayOfNulls<TextView>(size)

        for (k in invoiceItems!!.indices) {

            val rec = invoiceItems!![k].itemTitle
            Log.i("Re-ceived Item title", rec)

            //Item Name Display on Invoice Activity

            val layoutParams: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT
            ) // or wrap_content
            layoutParams.setMargins(0, 0, 0, 0)
            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START)

            itemTitle[k] = TextView(this)
            itemTitle[k]!!.hint = "Enter Item Title"
            itemTitle[k]!!.textSize = 16f
            itemTitle[k]!!.layoutParams = layoutParams
            itemTitle[k]!!.isClickable = true
            itemTitle[k]!!.isFocusable = true
            itemTitle[k]!!.setTextColor(resources.getColor(R.color.txtcolor))
            invoiceItemsLayout.addView(itemTitle[k])
            itemTitle[k]!!.text = invoiceItems!![k].itemTitle
            val value = invoiceItems!![k].itemTitle
            Log.i("Item title value", value)



            //Total Item Value
            itemValue[k] = TextView(this)
            val layoutParams2: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT
            ) // or wrap_content
            layoutParams2.setMargins(0, 0, 0, 0)
            layoutParams2.addRule(RelativeLayout.ALIGN_PARENT_END)
            if(k != 0){
                layoutParams2.addRule(RelativeLayout.BELOW, (k-1))
            }
            itemValue[k]!!.text = "00.00"
            itemValue[k]!!.textSize = 16f
            itemValue[k]!!.setTextColor(resources.getColor(R.color.txtcolor))
            itemValue[k]!!.setPadding(10, 0, 0, 10)
            itemValue[k]!!.layoutParams = layoutParams2
            invoiceItemsLayout.addView(itemValue[k], layoutParams2)
            itemValue[k]!!.text = invoiceItems!![k].itemTotal.toString()

            if(k == size) {
                //New Item Title field
                itemTitle[k + 1] = TextView(this)
                val layoutParams: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT
                ) // or wrap_content
                layoutParams.setMargins(0, 0, 0, 0)
                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START)
                itemTitle[k + 1]!!.hint = "Enter Item Title"
                itemTitle[k + 1]!!.textSize = 16f
                itemTitle[k + 1]!!.isClickable = true
                itemTitle[k + 1]!!.isFocusable = true
                itemTitle[k + 1]!!.setTextColor(resources.getColor(R.color.txtcolor))
                invoiceItemsLayout.addView(itemTitle[k], layoutParams)

                //New item value field
                itemValue[k + 1] = TextView(this)
                val layoutParams2: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT
                ) // or wrap_content
                layoutParams2.setMargins(0, 0, 0, 0)
                layoutParams2.addRule(RelativeLayout.ALIGN_PARENT_END)
                itemValue[k + 1]!!.text = "00.00"
                itemValue[k + 1]!!.textSize = 16f
                itemValue[k + 1]!!.setTextColor(resources.getColor(R.color.txtcolor))
                itemValue[k + 1]!!.setPadding(10, 0, 0, 10)
                itemValue[k + 1]!!.layoutParams = layoutParams2
                invoiceItemsLayout.addView(itemValue[k], layoutParams2)

                itemTitle[k + 1]!!.setOnClickListener {
                    updateInvoiceValues()
                    val intent = Intent(this, EditBillingItem::class.java)
                    intent.putExtra("invoiceItem", invoiceItems as Serializable)
                    intent.putExtra("index", k + 1)
                    intent.putExtra("invoiceEdit", invoiceEdit as Serializable)
                    this.startActivity(intent)
                }

            }
            itemTitle[k]!!.setOnClickListener {

                updateInvoiceValues()
                val intent = Intent(this, EditBillingItem::class.java)
                intent.putExtra("invoiceItem", invoiceItems as Serializable)
                intent.putExtra("index", k)
                intent.putExtra("invoiceEdit", invoiceEdit as Serializable)
                this.startActivity(intent)
            }
            subTotal += invoiceItems!![k].itemTotal
            val taxValue = invoiceItems!![k].itemRate!!
            taxrate += (subTotal * taxValue)
        }
        invoiceSubValue.text = subTotal.toString()
        total = subTotal + taxrate
        invoiceTaxValue.text = taxrate.toString()
        invoiceTotalValue.text = total.toString()

    } 

您需要设置 TextView 的 ID 并使用 addRule(BELOW, textview_id) 而不是“(k-1)”,这对规则没有任何意义。规则使用“IdRes”而不是简单的整数。

示例 (Java):

itemValue[k] = new TextView(this);
itemValue[k].setId(View.generateViewId());
...
layoutParams2.addRule(RelativeLayout.BELOW, itemValue[k].getId());
...
invoiceItemsLayout.addView(itemValue[k], layoutParams2);

View.generateViewId() 确保生成的 ID 是唯一的,并且尚未被其他一些视图使用。