我正在尝试创建一个显示EditText矩阵并允许用户输入文本的应用程序。我使用的是GridView,其中的项目为EditText。
我想读取或更新EditText数据时遇到问题。
在这里显示一些我拥有的代码。
Class MainActivity
class MainActivity : AppCompatActivity() {
var matrix1: Array<Array<Int>> = Array(3, {Array(3, {0})})
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var adapter = GridViewAdapter(this, matrix1)
gvMatrix1.numColumns = 3
gvMatrix1.adapter = adapter
}
}
类适配器
class GridViewAdapter(val context: Context, var matrix: Array<Array<Int>>) : BaseAdapter() {
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
var view = inflator.inflate(R.layout.grid_view_item, null)
return view
}
override fun getItem(p0: Int): Any = matrix[p0%matrix.size][p0-(p0-p0%matrix.size)]
override fun getItemId(p0: Int): Long = p0.toLong()
override fun getCount(): Int = matrix.size * matrix[0].size
}
activity_main.xml中的GridView XML
<GridView
android:id="@+id/gvMatrix1"
android:layout_width="100dip"
android:layout_height="200dip"
android:columnWidth="2dp"
android:numColumns="1"/>
GridView项XML
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/etItem"
android:layout_width="match_parent"
android:layout_height="match_parent">
我的目的是读取所有editText的内容,以将它们保存在matrix1中,修改matrix1并显示其新内容。
对于这种用途,GridView是一个不错的选择吗?还是有些布局或视图更好?
谢谢。
答案 0 :(得分:0)
我在listview中使用了EditText。但是出现EditText行为问题。然后我使用循环切换到添加视图方法。
val results = List<String>
for(i in results.size downTo 0 ){
val inflatedView = LayoutInflater.from(this@MainActivity).inflate(R.layout.myView, card_container, false)
.......
.......
card_container.addView(inflatedView)
}
这里card_container
是LinearLayout。
我想girdview也有listview的问题。因此,您可以尝试此解决方案,以查看是否可行。
答案 1 :(得分:0)
Here我已经找到了如何获取特定位置的视图。
接下来,我举一个代码示例来获取项目的文本以及如何将文本发送到项目
var itemView = gvMatrix1.getChildAt(4) //obtain view of the position 4
var editText = itemView.findViewById(R.id.etItem) as EditText //cast view as EditText
var text = editText.text //getText from editText
editText.setText("8") //setText in editText