2012-02-10 2 views
3

Je suis en train de changer mon contenu de l'activité à un moment donné. (à View2). Après la modification de View1, les écouteurs ne fonctionnent plus. J'ai déjà essayé de placer l'écouteur dans la méthode onResume().setContentView et les auditeurs

Est-il courant d'utiliser setContentView() pour afficher par ex. un écran de progression/veuillez patienter, ... (pendant l'exécution d'une asyncTask). Ou devriez-vous avoir seulement une vue principale pour chaque activité? (et en remplaçant le contenu dynamiquement).

// EDIT: Pour être plus précis: Je cherche quelque chose comme

LinearLayout item = (LinearLayout) findViewById(R.id.mainView); 
View child = getLayoutInflater().inflate(R.layout.progress, null); 
item.addView(child); 

mais au lieu d'ajouter le « progress.xml », il devrait supprimer la disposition actuelle et seulement montrer « des progrès. xml ". Ai-je besoin d'un "conteneur" pour afficher/masquer mainView/progress? Mais cela ne me semble pas très propre à ...

Voir aussi le code ci-dessous (dénudée)

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.view1); 

     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       doSomething(); 
      } 
     }); 
} 

setContentView(R.layout.view2); 
[...] 
setContentView(R.layout.view1); 

//Listener not more working 
+0

Comment créer un 'bouton'? Vous devez montrer plus de code. –

+1

Je pense que votre approche est correcte dans certaines circonstances (par exemple view1 est un écran de chargement ou de démarrage et view2 est content.Une façon de gérer cela est de mettre le contenu de view1 et view2 dans le même fichier layout imbriqué sous un FrameLayout et basculer le visibilité d'eux de View.GONE à View.VISIBLE si nécessaire avec View # setVisibility(). – nmr

Répondre

1

Merci à tous pour votre réponse. Vous m'avez fait réaliser, les onClickListeners se perdent lorsque je supprime ou remplace (en utilisant setContentView()) la vue principale. J'ai fini de cette façon maintenant:

onCreate:

setContentView(R.layout.parse); 
LinearLayout container = (LinearLayout) findViewById(R.id.container); 
container.addView(getLayoutInflater().inflate(R.layout.dialog, null)); 
container.addView(getLayoutInflater().inflate(R.layout.progress, null)); 

onStartDoingSomething:

findViewById(R.id.dialog).setVisibility(View.INVISIBLE); 
findViewById(R.id.progress).setVisibility(View.VISIBLE); 

onEndDoingSomehting:

findViewById(R.id.dialog).setVisibility(View.VISIBLE); 
findViewById(R.id.progress).setVisibility(View.INVISIBLE); 

je pourrais changer View.INVISIBLE à View.GONE, comme RMN a dit, mais puisque je n'ai jamais utilisé View.GONE, je dois d'abord vérifier le doku Android;)

0

Vous ne pouvez avoir une interface utilisateur pour chaque activité, vous devez créer une autre activité et dans sa méthode onCreate définir l'affichage du contenu

étapes:

  1. Créer une activité
  2. Utilisez le code suivant pour définir le contenu Affichage:

    public void onCreate (groupe savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.view2);

    }

  3. Définir l'activité dans les applications manifeste en tant que tel:

  4. Créer une intention dans la première activité:

    public void onCreate (Bundle savedInstanceState) { super.onCrée (savedInstanceState); setContentView (R.layout.view1);

    Bouton de bouton = (Bouton) findViewById (bouton R.id);

    button.setOnClickListener (nouveau OnClickListener() { @Override public void onClick (Voir v) { intention();} }); }

    intention void() {

    intention Intention = new intention(); intent.setClass (Activity1.this, Activity2.classe); startActivity (intention);

    }

Et là, vous allez c:

+0

Eh bien, mais plus d'une interface utilisateur fonctionne ... mais il semble que c'est une chose commune d'appeler seulement setContentView une fois dans le mode de fonctionnement onCreate –

+0

Modifier les activités n'est pas très compliqué, mais si c'est juste un dialogue de progression que vous voulez, vous pouvez simplement créer un dialogue de progression, Jetez un oeil à cela pour la référence veloper.android.com/reference/android/app/ProgressDialog.html – FabianCook

+0

La chose est, que l'Activity_XY est l'un des trois onglets. Il commence une async tâches après avoir appuyé sur un bouton, que appelle Progress-Handler-méthodes de l'Activity_XY, lui fournissant des informations (texte). –

1

En supposant que vous utilisez 'findViewById' pour initialiser 'bouton', vous devez le faire à chaque fois que vous faites setContentView (R.layout .view1);

+0

merci, vous avez raison, c'est le point que je devrais appeler les relieurs Binders ... mais ce n'est pas très approprié ... –