Android: comment puis-je conserver les données dans mon arrayadapter / ListView lorsque l'orientation du changement?

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

Question

comme ci-dessus, il est fait automatiquement? Ma liste était vide une fois l'orientation chMYanges? et Nope, j'ai besoin du changement d'orientation =)

Mon adaptateur

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

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

merci les gars

Était-ce utile?

La solution

Vous pouvez également utiliser http://developer.android. com / référence / android / app / Activity.html # onRetainNonConfigurationInstance ()

Quelque chose comme ceci dans votre activité:

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

Et puis dans votre 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);

    // ...
}

Autres conseils

Si vous avez des données dans la mémoire qui doit rester lors d'un changement d'orientation, vous devez faire quelque chose pour arranger ça. La meilleure solution consiste à mettre en œuvre onSaveInstanceState() et l'utiliser pour stocker vos données, parce que s'accoutume non seulement pour les changements d'orientation, mais d'autres situations (par exemple, votre activité est sur la pile actuelle, mais il a besoin de se faire expulser de RAM pour libérer de l'espace pour des choses plus tard dans la pile).

Je pense que vous êtes sur la mauvaise façon. S'il vous plaît prendre un certain temps pour voir cette vidéo de développeurs d'Android: http://www.youtube.com/watch ? v = wDBM6wVEO70 (environ 1 heure).

Je suivais la vidéo, et mon point de vue de la liste fonctionne très bien au moment du changement d'orientation écran: -)

J'ai résolu ce problème en utilisant OnSaveInstanceState() et 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 est prise dans ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);

Maintenant, quand vous changez de paysage à portrait et arrière, les données ne sont pas los

Les données ne doivent pas être perdues lorsque vous modifiez l'orientation. La seule chose que je peux imaginer que la mise en page de votre activité n'est pas correcte, comme, les contrôles se déplacent hors de la zone visible lors d'un changement de l'orientation.

S'il vous plaît mettre ce code dans votre fichier AndroidManifest.xml.

activity
        android:name="MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation|screenSize"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top