Android: come faccio a conservare i dati nel mio arrayadapter / ListView quando il cambiamento di orientamento?

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

Domanda

come sopra, si fa automaticamente? La mia lista era vuota una volta che i chMYanges di orientamento? e no, ho bisogno del cambiamento dell'orientamento =)

Il mio adattatore

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;
}

Il mio 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);

grazie ragazzi

È stato utile?

Soluzione

È inoltre possibile utilizzare http://developer.android. com / riferimento / android / app / Activity.html # onRetainNonConfigurationInstance ()

Qualcosa di simile nella vostra attività:

@Override
public Object onRetainNonConfigurationInstance() {
    return this.m_adapter.getItems();
}

E poi nel vostro 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);

    // ...
}

Altri suggerimenti

Se si dispone di dati in memoria che ha bisogno di restare durante un cambio di orientamento, è necessario fare qualcosa per organizzare questo. La soluzione migliore è quella di implementare onSaveInstanceState() e usarlo per memorizzare i dati, perché si abitua non solo per le modifiche di orientamento, ma altre situazioni, nonché (per esempio, la vostra attività è in pila corrente, ma ha bisogno di ottenere buttato fuori di RAM per liberare spazio per le cose più tardi nella pila).

Credo che tu sia sulla strada sbagliata. Si prega di richiedere un certo tempo per vedere questo video da parte degli sviluppatori di Android: http://www.youtube.com/watch ? v = wDBM6wVEO70 (circa 1 ora).

Ho seguito il video, e la mia vista elenco funziona bene quando schermo cambia orientamento: -)

Ho risolto questo problema utilizzando OnSaveInstanceState() e 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 è attesa in ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);

Non

Ora, quando si passa da orizzontale a verticale e invertire, i dati sono los

I dati non devono essere persi quando si modifica l'orientamento. L'unica cosa che posso immaginare è che il layout per la vostra attività non è corretto, come, i controlli si spostano fuori della zona visibile sul cambiare l'orientamento.

Si prega di inserire questo codice nel file AndroidManifest.xml.

activity
        android:name="MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation|screenSize"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top