我使用GridView控件動態加載數據到我的活動:恢復GridView的方向更改後的數據
private ArticuloAdapter articuloAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_articulos);
// get ListaArticulos from the database
articuloAdapter = new ArticuloAdapter(this,R.layout.lista_articulo, ListaArticulos);
grdArticulos.setAdapter(articuloAdapter);
}
而且我希望有一個方向更改後恢復數據:
ArrayList<String> articulosBackup = new ArrayList<String>();
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
int size = grdArticulos.getChildCount();
for(int i = 0; i < size; i++) {
ViewGroup layout = (ViewGroup) this.grdArticulos.getChildAt(i);
ViewGroup gridChild = (ViewGroup) layout.getChildAt(1);
EditText et =(EditText)gridChild.getChildAt(0).findViewById(R.id.Cantidad);
EditText et2 = (EditText)gridChild.getChildAt(1).findViewById(R.id.jaulas);
EditText et3 =(EditText)gridChild.getChildAt(2).findViewById(R.id.contenedores);
CheckBox cb = (CheckBox)gridChild.getChildAt(3).findViewById(R.id.manipulado);
String dato = et.getText().toString() + ":" + et2.getText().toString() + ":" + et3.getText().toString() + ":" + String.valueOf(cb.isChecked());
articulosBackup.add(dato);
}
outState.putSerializable("articulosBackup", articulosBackup);
outState.putInt("items", size);
}
我將數據以字符串形式保存在ArrayList中,格式爲:data1:data2:data3:data4。 這很好。但現在,當我試圖還原他們我NullPointerException異常的行被註釋掉:
@SuppressWarnings("unchecked")
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
articulosBackup = (ArrayList<String>)savedInstanceState.getSerializable("articulosBackup");
items = savedInstanceState.getInt("items");
if (articulosBackup != null) {
for(int i = 0; i < items; i++) {
ViewGroup layout = (ViewGroup) grdArticulos.getChildAt(i);
ViewGroup gridChild = (ViewGroup) layout.getChildAt(1); // NULLPOINTEREXECPTION: layout variable is null
String datos[] = articulosBackup.get(i).split(":");
// Cantidad
EditText et =(EditText)gridChild.getChildAt(0).findViewById(R.id.Cantidad);
et.setText(datos[0]);
// Jaulas
EditText et2 = (EditText)gridChild.getChildAt(1).findViewById(R.id.jaulas);
et2.setText(datos[1]);
// Contenedores
EditText et3 =(EditText)gridChild.getChildAt(2).findViewById(R.id.contenedores);
et3.setText(datos[2]);
// Manipulado
CheckBox cb = (CheckBox)gridChild.getChildAt(3).findViewById(R.id.manipulado);
cb.setChecked(Boolean.parseBoolean(datos[3]));
}
}
}
所以我的問題是:我怎麼能更改方向後恢復我的動態GridView的?謝謝。
謝謝,我已經實現了你的解決方案,但在GridView不加載我存儲的數據。 arrayList完美地保存數據。 –
@enrmarc。一旦arraylist保存數據,最終的ArrayList數據=(ArrayList)getLastNonConfigurationInstance();.數據是返回的數組列表。如果它的null再次加載。如果不使用相同的 – Raghunandan
對不起,我的'ArticuloAdapter'是錯誤的(它沒有設置數據)。非常感謝你。 –