Android: Wie erhalten wir die Daten in meiner arrayadapter / Listenansicht, wenn ändern Orientierung?

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

Frage

, wie oben, wird es automatisch gemacht? Meine Liste war leer, sobald die Ausrichtung chMYanges? und nein, ich brauche die Orientierungsänderung =)

Mein Adapter

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

Meine 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);

Danke Jungs

War es hilfreich?

Lösung

Sie können auch verwenden http://developer.android. com / reference / android / app / Activity.html # onRetainNonConfigurationInstance ()

So etwas wie dies in Ihrer Aktivität:

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

Und dann in Ihrem 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);

    // ...
}

Andere Tipps

Wenn Sie die Daten im Speicher haben, dass der Bedarf während einer Orientierungsänderung bleiben, um, müssen Sie etwas tun, dass zu arrangieren. Die beste Lösung ist onSaveInstanceState() zu implementieren und verwenden, um Ihre Daten zu speichern, weil das nicht nur zur Orientierung Änderungen verwendet wird, aber auch andere Situationen als auch (zB Ihre Aktivität ist auf dem aktuellen Stack, aber es muss von RAM hinausgeworfen werden Raum für Dinge später in dem Stapel freizugeben).

Ich glaube, Sie auf dem falschen Weg sind. Bitte nehmen Sie sich etwas Zeit, das Video von Android-Entwickler, um zu sehen: http://www.youtube.com/watch ? v = wDBM6wVEO70 (ca. 1 Stunde).

Ich folgte das Video, und meine Listenansicht funktioniert gut, wenn die Bildschirmausrichtung ändert: -)

Ich löste dieses Problem mit OnSaveInstanceState() und 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 ist Halt in ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);

Wenn Sie nun von Quer- auf Hochformat wechseln und umgekehrt, die Daten nicht los

Die Daten sollten nicht verloren gehen, wenn Sie die Ausrichtung ändern. Das einzige, was ich mir vorstellen kann ist, dass das Layout für Ihre Tätigkeit nicht korrekt ist, wie, Kontrollen des sichtbaren Bereichs bewegen sich auf die Ausrichtung zu ändern.

Bitte setzen Sie diesen Code in Ihrer AndroidManifest.xml Datei.

activity
        android:name="MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation|screenSize"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top