android: comment puis-je conserver les données dans mon arrayadapter/listview, lorsque le changement d'orientation?
comme ci-dessus, c'est fait automatiquement? Ma liste était vide une fois l'orientation chMYanges? et nan, j'ai besoin de le 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
"en preservant"? J'ai d'abord lu "pervers" (désolé), mais je suppose que tu veux dire "preserve" 😉
oui, je veux dire de les préserver.
oui, je veux dire de les préserver.
OriginalL'auteur joejy | 2010-02-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance()
Quelque chose comme ceci dans votre Activité:
Et puis dans votre onCreate():
Ni
ArrayAdapter
ni sa société mère les classes ont ungetItems
méthode. Ce qui me manque ici?Notez que sur les dernières Versions d'Android (au moins 4,0) cette pratique est fortement déconseillée.
Alors quoi de la nouvelle méthode?
utilisation
getItemsArrayList()
. La Solution a fonctionné pour moi.OriginalL'auteur synic
Si vous avez des données dans la mémoire qui doit rester dans les parages pendant un changement d'orientation, vous avez besoin de faire quelque chose pour arranger ça. La meilleure solution est de mettre en œuvre
onSaveInstanceState()
et l'utiliser pour stocker vos données, parce que c'est utilisé non seulement pour les changements d'orientation, mais d'autres situations (par exemple, votre activité est sur le courant de la pile, mais il doit être viré de mémoire pour libérer de l'espace pour des choses plus tard dans la pile).Via
onSaveInstanceState()
, vous ne pouvez pas, parce que votre processus peut être détruit (voir par exemple, dans ma réponse). Vous pouvez utiliseronRetainNonConfigurationInstance()
pour faire tenir un objet arbitraire lors d'un changement d'orientation, mais gardez à l'esprit que ce joli beaucoup poignées de changements d'orientation, pas de scénarios où votre activité est retiré de la RAM.OriginalL'auteur CommonsWare
Je pense que vous êtes sur le mauvais chemin. Veuillez prendre le temps de voir cette vidéo de Android développeurs: http://www.youtube.com/watch?v=wDBM6wVEO70 (environ 1 heure).
J'ai suivi la vidéo, et ma liste vue fonctionne bien lorsque l'écran change d'orientation 🙂
OriginalL'auteur
J'ai résolu ce problème en utilisant
OnSaveInstanceState()
etOnRestoreInstanceState()
name_array
est de tenir enArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);
Maintenant, quand vous changez de paysage à portrait et à l'inverse, les données ne sont pas los
OriginalL'auteur Mitro
Les données ne doivent pas être perdues lorsque vous modifiez l'orientation. La seule chose que je peux imaginer, c'est que la mise en page de votre activité n'est pas correct, comme, les contrôles se déplacer hors de la zone visible sur le changement de l'orientation.
bonjour thorsten, est-ce dû au fait que j'ai effectivement utilisé un personnalisé arrayadapter pour l'affichage et le stockage des données de l'état de l'adaptateur n'est pas sauvé? Dois-je lancer mon adaptateur dans onCreate()?
salut jack, je pense que oui, parce que j'ai eu un nullpointer exception à ma carte quand j'ai changé mon orientation. Ce qui est peut-être la raison pour laquelle mon adaptateur ne pas recréer?
Hm. Je suis à l'aide du code à partir de la Note de l'échantillon qui vient avec l'API pour remplir une ListView avec des éléments de ma base de données. Qui n'est pas détruit lors de la modification de l'orientation. Peut-être que vous êtes en train de créer le ArrayAdapter dans le "mauvais endroit"? I. e., le code qui est appelé non seulement à la création de l'Activité par aussi sur le changement de l'orientation? Je ne peux pas imaginer que l'Activité doit être détruit et recréé sur la réorientation de l'écran...
Bonjour Thorsten: un changement d'orientation par défaut sera la cause de l'Activité, afin d'être détruites, voir: developer.android.com/intl/de/reference/android/app/... Joejy: peut-être il ya certaines données que vous devez être persistant dans la onSaveInstanceState() de votre activité et de déballage dans la onRestoreInstanceState méthode? Voir l'Activité de documentation pour plus d'info.
OriginalL'auteur Thorsten Dittmar
S'il vous plaît mettez ce code dans votre
AndroidManifest.xml
fichier.OriginalL'auteur AjitMogra