В моей программе у меня есть TableLayout с одним TableRow, где я динамически добавил больше TableRows с 4 TextViews при нажатии кнопки. Теперь я хочу сохранить и восстановить эту таблицу, если я изменю ориентацию своего телефона.
У меня есть следующий код, который должен это сделать:
@Override
protected void onSaveInstanceState(Bundle outState) {
rowcount = tableLayout.getChildCount();
for (int i = 0; i < rowcount; i++) {
View row = tableLayout.getChildAt(i);
if (row instanceof TableRow) {
View rowchild1 = tableRow.getChildAt(0);
if (rowchild1 instanceof TextView) {
savewarnum[i] = ((TextView) rowchild1).getText().toString();
}
View rowchild2 = tableRow.getChildAt(1);
if (rowchild2 instanceof TextView) {
savewarname[i] = ((TextView) rowchild2).getText().toString();
}
View rowchild3 = tableRow.getChildAt(2);
if (rowchild3 instanceof TextView) {
savewarmeng[i] = ((TextView) rowchild3).getText().toString();
}
View rowchild4 = tableRow.getChildAt(3);
if (rowchild4 instanceof TextView) {
savewarpreis[i] = ((TextView) rowchild4).getText().toString();
}
}
}
outState.putStringArray("Nummer", savewarnum);
outState.putStringArray("Name", savewarname);
outState.putStringArray("Menge", savewarmeng);
outState.putStringArray("Preis", savewarpreis);
outState.putInt("Rows", rowcount);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
savewarnum = savedInstanceState.getStringArray("Nummer");
savewarname = savedInstanceState.getStringArray("Name");
savewarmeng = savedInstanceState.getStringArray("Menge");
savewarpreis = savedInstanceState.getStringArray("Preis");
rowcount = savedInstanceState.getInt("Rows");
tableLayout = (TableLayout) findViewById(R.id.kaufwaren);
for(int i=0; i<=rowcount; i++) {
View tablechild = tableLayout.getChildAt(i);
if (tablechild instanceof TableRow) {
View rowchild1 = tableRow.getChildAt(0);
if (rowchild1 instanceof TextView) {
((TextView) rowchild1).setText(savewarnum[i]);
}
View rowchild2 = tableRow.getChildAt(1);
if (rowchild2 instanceof TextView) {
((TextView) rowchild2).setText(savewarname[i]);
}
View rowchild3 = tableRow.getChildAt(2);
if (rowchild3 instanceof TextView) {
((TextView) rowchild3).setText(savewarmeng[i]);
}
View rowchild4 = tableRow.getChildAt(3);
if (rowchild4 instanceof TextView) {
((TextView) rowchild4).setText(savewarpreis[i]);
}
}
createtablerow();
}
super.onRestoreInstanceState(savedInstanceState);
}
В моем методе onSavedInstanceState я просматриваю свою таблицу, в которой сохраняю каждое текстовое представление в StringArray. В onRestoreInstanceState я пытаюсь воссоздать таблицу.
Теперь у меня две проблемы. Моя первая проблема заключается в том, что моя программа не проходит через таблицу в onSavedInstanceState. Он просто добавляет TextViews последней строки в мой массив строк вместо TextViews из всех строк.
Например, у меня есть две строки:
Строка 1: 'abc' '123' 'def' '456'
Строка 2: «cba» «321» «fed» «654»
Теперь ABC и CBA должны быть в моем первом массиве строк, но CBA в два раза больше, потому что это последняя строка.
Моя вторая проблема заключается в onRestoreInstanceState. Как только я достигну «View rowchild1 = tableRow.getChildAt(0);» моя программа вылетает.
Кто-нибудь знает решение?
savewarnum
,savewarname
и т. д., прежде чем они будут сохранены в пакет? Содержат ли они ожидаемые значения? - person foxanna   schedule 16.12.2016for (int i = 0; i <= rowcount; i++)
кажется подозрительным. Возможно, вам следует использоватьi < rowcount
в качестве условия остановки - person foxanna   schedule 16.12.2016View row = tableLayout.getChildAt(i);
вtableRow
. Должно бытьtableRow = (TableRow)row;
- person foxanna   schedule 16.12.2016if (tablechild instanceof TableRow)
или после? - person Distrax   schedule 16.12.2016