Android: ¿Cómo conservar los datos en mi ArrayAdapter / listview cuando el cambio de orientación?
-
22-09-2019 - |
Pregunta
que el anterior, es que se haga de forma automática? Mi lista estaba vacía una vez que los chMYanges de orientación? y No, necesito el cambio de orientación =)
Mi adaptador
public class ResultsAdapter extends ArrayAdapter<SearchItem> implements Filterable{
private ArrayList<SearchItem> subItems;
private ArrayList<SearchItem> allItems;// = new ArrayList<SearchItem>();
private LayoutInflater inflater;
private PTypeFilter filter;
private OnCheckedChangeListener test;
public ResultsAdapter(Context context, int textViewResourceId, ArrayList<SearchItem> items,OnCheckedChangeListener a) {
super(context, textViewResourceId, items);
//this.subItems = items;
for( int i = 0;i < items.size();i++){
subItems.add(items.get(i));
}
this.allItems = this.subItems;
inflater= LayoutInflater.from(context);
test = a;
}
Mi onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lvr = (ListView)findViewById(R.id.search_results);
// if(savedInstanceState == null){
this.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);
this.specsAdapter = new FeaturesExpandableAdapter(home.this,new ArrayList<String>(),new ArrayList<ArrayList<Feature>>());
// }
lvr.setAdapter(this.m_adapter);
gracias chicos
Solución
También puede utilizar http://developer.android. com / referencia / android / app / Activity.html # onRetainNonConfigurationInstance ()
Algo como esto en su actividad:
@Override
public Object onRetainNonConfigurationInstance() {
return this.m_adapter.getItems();
}
Y a continuación, en su onCreate ():
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// more init stuff here
sResultsArr = (ArrayList<SearchItems>)getLastNonConfigurationInstance();
if(sResultArr == null) {
sResultsArray = new ArrayList<SearchItems>(); // or some other initialization
}
self.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);
// ...
}
Otros consejos
Si tiene datos en la memoria que las necesidades se queden durante un cambio de orientación, es necesario hacer algo para arreglar eso. La mejor solución es implementar onSaveInstanceState()
y lo utilizan para almacenar sus datos, ya que se usa no sólo para los cambios de orientación, pero otras situaciones (por ejemplo, su actividad está en la pila actual, pero es necesario que te echen de RAM para liberar espacio para las cosas más adelante en la pila).
Creo que estás en el camino equivocado. Por favor tome tiempo para ver el vídeo de los desarrolladores de Android: http://www.youtube.com/watch ? v = wDBM6wVEO70 (aproximadamente 1 hora).
Me siguió el video, y mi vista de lista funciona bien cuando cambia la orientación de la pantalla: -)
I resolvió este problema utilizando OnSaveInstanceState()
y OnRestoreInstanceState()
@Override
protected void onRestoreInstanceState(Bundle state){
super.onRestoreInstanceState(state);
name_array.addAll(state.getStringArrayList("key"));
setListAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
}
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putStringArrayList("key",name_array);
}
name_array
es asimiento en ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);
Ahora, cuando se cambia de horizontal a vertical y marcha atrás, los datos no son los
Los datos no se debe perder cuando se cambia la orientación. La única cosa que puedo imaginar es que el diseño para su actividad no es correcta, como, los controles se mueven fuera del área visible al cambiar la orientación.
Por favor, ponga el código en el archivo de AndroidManifest.xml
.
activity
android:name="MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"