2010-01-29 4 views
2

Actuellement je travaille sur une application Android qui crée dynamiquement des contrôles. Chaque fois qu'un utilisateur clique sur un bouton, un nouvel EditText apparaît sous le bouton et l'utilisateur peut interagir avec EditText. Toutefois, si l'orientation de l'écran change, les EditText créés par l'utilisateur disparaissent également.Android: création dynamique de contrôles et changement d'orientation

Exemple de code d'utilisateur qui crée un EditText: (situé dans un onClick(), p est layoutParamas de base, et la mise en page est un LinearLayout situé undearneath le bouton)

EditText editText = new EditText(this); 
    layout.addView(buttonView, p); 

Vous vous demandez ce serait la meilleure façon de enregistrer la mise en page lorsque l'orientation de l'écran change, donc je ne perds aucun des contrôles, ou est-ce que je crée dyanmically les contrôles mal.

Merci. Mise à jour: En écrasant onSaveInstanceState(), j'ai pu enregistrer un objet qui contenait une liste de tous les contrôles que l'utilisateur avait ajoutés. En utilisant cette liste, j'ai été capable de créer les contrôles dans onCreate().

Encore curieux s'il y a un moyen plus facile d'accomplir cette tâche, car je devrais refactoriser beaucoup de code pour implémenter complètement cette méthode.

+0

Vous avez donc pu enregistrer un objet réel? Mon activité permet à l'utilisateur d'afficher des vues de widget, très similaire à ce que vous faites pour ajouter une vue en fonction de ce qu'elles font. Et je veux enregistrer des widgets [] dans le paquet, mais je ne suis pas sûr de savoir comment. – mylock

+0

Il y a quelques guides qui peuvent être trouvés en ligne. Par exemple: http://www.anddev.org/putting_an_object_into_a_bundle-t6431.html Fondamentalement, vous devez avoir l'objet implémentable Serializable ou Parcelable. Puis, en utilisant bundle.putSerializable ou bundle.putParcelable, vous pouvez passer l'objet. Désolé pour le retard de réponse – BigAlHt

Répondre

5

Essayez d'ajouter ceci à votre tag <activity> dans votre fichier manifeste:

android:configChanges="orientation|keyboardHidden" 

faire ensuite ceci dans la classe d'activité:

@Override 
public void onConfigurationChanged(final Configuration newConfig) 
{ 
    // Ignore orientation change to keep activity from restarting 
    super.onConfigurationChanged(newConfig); 
} 

Si vous faites cela votre activité sera simplement réutilisée sur l'orientation changer au lieu de détruit/recréé. Vous n'aurez donc pas à sauvegarder l'état de tout ce que vous avez.

+0

WoW. Merci beaucoup. Fonctionne merveilleusement bien. – BigAlHt