В моей программе I есть TableLayout с одним TableRow, где я добавил еще несколько TableRows с 4 TextViews в нем динамически на кнопке Click. Теперь я хочу сохранить и восстановить эту таблицу, если я изменил ориентацию своего телефона.Сохранение и восстановление TableLayout при изменении ориентации
У меня следующий код, который должен сделать это:
@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 метод, я иду через мой стол, где я откладываю каждый TextView в StringArray. В onRestoreInstanceState я пытаюсь воссоздать таблицу.
Теперь у меня есть две проблемы. Моя первая проблема заключается в том, что моя программа не проходит через таблицу в onSavedInstanceState. Он просто добавляет TextViews последней строки в мой строковый массив вместо TextViews из всех строк.
Например у меня есть два ряда:
Строка 1: 'ABC' '123' 'DEF' '456'
Строка 2: 'сЬа' '321' 'подают' '654'
Теперь ABC и CBA должны быть в моем первом массиве строк, но есть два раза CBA, потому что это последняя строка.
Моя вторая проблема в onRestoreInstanceState. Как только я дойду «Просмотр rowchild1 = tableRow.getChildAt (0); ' моя программа выйдет из строя.
Кто-нибудь знает решение?
Вы проверили набор значений в 'savewarnum',' savewarname' и т. Д., Прежде чем они будут сохранены в комплекте? Они содержат значения, которые вы ожидаете? – foxanna
Этот цикл 'for (int i = 0; i <= rowcount; i ++)' выглядит подозрительным. Может быть, вы должны использовать 'i
foxanna
@foxanna, то проблема в том, что значения, которые сохраняются в savewarnum и т. Д., Являются только значениями моей последней строки таблицы не из всех созданных мной строк. Также я изменил условие остановки I, но он все еще не решает мою проблему, как я получаю тексты из текстовых просмотров из моих старых строк. – Distrax