내 프로그램에서 버튼 클릭시 4 개의 TextView가있는 TableRow를 추가 한 TableRowout이있는 TableLayout이 있어야합니다. 이제 휴대 전화의 방향을 변경하면이 테이블을 저장하고 복원하려고합니다.오리엔테이션 변경시 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의 모든 텍스트 뷰를 저장 내 테이블을 통해거야. onRestoreInstanceState에서 테이블을 다시 만들려고합니다.
이제 두 가지 문제가 있습니다. 내 첫 번째 문제는 내 프로그램이 onSavedInstanceState의 테이블을 통과하지 않는다는 것입니다. 단지 모든 행의 TextViews 대신 마지막 행의 TextViews를 문자열 배열에 추가합니다.
행 1 :
예나는 두 행이 'ABC' '데프' '123'456 '
행 2'CBA '321'공급 '654'
이제 ABC와 CBA가 첫 번째 문자열 배열에 있어야하지만 마지막 행이기 때문에 CBA가 두 번 있습니다.
두 번째 문제는 onRestoreInstanceState에 있습니다. 'View rowchild1 = tableRow.getChildAt (0);'에 도달하자마자 ' 내 프로그램이 충돌합니다.
해결책을 아는 사람이 있습니까?
번들에 저장되기 전에'savewarnum','savewarname' 등에서 값의 집합을 확인 했습니까? 그들은 당신이 기대하는 가치를 포함하고 있습니까? – foxanna
이주기'for (int i = 0; i <= 행 개수; i ++)는 의심스러운 것처럼 보입니다. 어쩌면 당신은 stop 조건으로'i
foxanna
@foxanna 그게 문제예요 savewarnum에 저장된 값은 내가 만든 모든 행이 아닌 마지막 행의 값일뿐입니다. 또한 중지 조건을 변경했지만 여전히 내 이전 행의 textviews에서 텍스트를 얻는 방법에 대한 내 문제를 해결하지 못합니다. – Distrax