'''
class MainActivity : AppCompatActivity() {
private var button: Button? = null
private var textList: ArrayList<ArrayList<EditText>> = arrayListOf(arrayListOf())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button = findViewById<Button>(R.id.solve)
textList[0][0]=findViewById<EditText>(R.id.ed1)
textList[0][1]=(findViewById(R.id.ed2))
textList[0][2]=(findViewById(R.id.ed3))
textList[0][3]=(findViewById(R.id.ed4))
textList[0][4]=(findViewById(R.id.ed5))
}
}
'''
Я хотел сохранить EditText в 2D ArrayList, но вышеуказанный метод не работает. Не знаю почему, но приложение вылетает при открытии. Итак, как мне это сделать?
Этот:
val list: ArrayList<Int> = arrayListOf()
list[0] = 123
означает «заменить элемент с индексом 0 на 123
». Но это пустой список, там является нет индекса 0. Представьте, что вместо него вы использовали индекс 2 — если вы мог что-то туда вставите, что будет по индексам 1 и 0? Чтобы что-то было 3-м в списке, должны быть 2-й и 1-й элементы, верно?
Вместо этого вы, вероятно, хотите массив:
private val rows = 5
private val columns = 5
private var textList: Array<Array<EditText>> = Array(rows) { arrayOfNulls(columns) }
Это создаст массив для каждой строки, и он будет заполнен нулями, по одному для каждого столбца. Затем вы можете назначить их с помощью findViewById
(который может возвращать ноль, что было еще одной проблемой вашего ArrayList
— он мог содержать только ненулевые EditText
)
Вероятно, есть лучшие способы делать то, что вы делаете, но это ваша основная проблема здесь - не можете обновлять элементы в списке, которые не существуют. И массив имеет больше смысла для фиксированной структуры, к которой вы собираетесь обращаться по индексу.