动态数组 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 是唯一的,并且尚未被其他一些视图使用。
我正在尝试在数组中显示多个文本视图。它应该首先显示输入值的提示,然后单击它允许您输入值,完成后,屏幕会显示该值以及下面的另一个字段以输入下一个值
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 是唯一的,并且尚未被其他一些视图使用。