Android: ¿Cómo conservar los datos en mi ArrayAdapter / listview cuando el cambio de orientación?

StackOverflow https://stackoverflow.com/questions/2340838

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

¿Fue útil?

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"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top