私のプログラムでは、1つのTableRowでTableLayoutを作成し、ボタンクリックで4つのTextViewを動的に追加したTableRowを追加しました。今私は私の携帯電話の向きを変更する場合は、このテーブルを保存して復元したいと思います。向きの変更で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方法では、私は私がのStringArray内のすべてのTextViewを保存し、私のテーブルをつもりです。 onRestoreInstanceStateでは、テーブルを再作成しようとしています。
今私は2つの問題があります。私の最初の問題は、私のプログラムはonSavedInstanceStateのテーブルを通過しないということです。これは、すべての行のTextViewsではなく、最後の行のTextViewsを文字列配列に追加するだけです。例えば
iを二列有する:
行1: 'ABC' '123' 'DEF '456'
行2: 'CBA' が '321' ' '654'
' 供給を今やABCとCBAは最初の文字列配列になければなりませんが、CBAは最後の行であるため2回あります。
私の2番目の問題は、onRestoreInstanceStateにあります。私が 'view rowchild1 = tableRow.getChildAt(0);'に達するとすぐに、私のプログラムはクラッシュします。
ソリューションを知っている人はいますか?
'savewarnum'、' savewarname'などの値をチェックしたことがありますか?彼らはあなたが期待する価値を含んでいますか? – foxanna
このサイクルの 'for(int i = 0; i <= rowcount; i ++)は不審なようです。たぶんあなたは停止条件として 'i
foxanna
@foxannaそれは問題です。savewarnumに保存される値は、私が作成したすべての行からではなく、最後のテーブル行の値だけです。また、私は停止条件を変更しましたが、それでも私の古い行からtextviewsのテキストを取得する方法の私の問題を解決していません – Distrax