私のプログラムでは、1 つの TableRow を持つ TableLayout があり、ボタン クリックで動的に 4 つの TextView を持つ TableRow を追加しました。携帯電話の向きを変えたら、このテーブルを保存して復元したいと思います。
これを行う必要がある次のコードがあります。
@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 で、テーブルを再作成しようとしています。
今、私には2つの問題があります。私の最初の問題は、私のプログラムが onSavedInstanceState のテーブルを通過しないことです。すべての行の TextView ではなく、最後の行の TextView を文字列配列に追加するだけです。
たとえば、次の 2 つの行があります。
行 1: 'abc' '123' 'def' '456'
行 2: 'cba' '321' 'fed' '654'
これで、ABC と CBA が最初の文字列配列にあるはずですが、CBA は最後の行であるため 2 回あります。
私の 2 番目の問題は onRestoreInstanceState にあります。「View rowchild1 = tableRow.getChildAt(0);」に到達するとすぐに プログラムがクラッシュします。
誰かが解決策を知っていますか?