2012-09-15 4 views
3

J'utilise ActionBarSherlock de Jake Wharton; et dans une de mes activités, j'utilise l'onglet Navigation. Et, j'ai un ViewFlipper pour gérer certaines vues. Mais, je veux que l'utilisateur puisse glisser entre les onglets.Onglet ActionBarSherlock - Diapositive

Cela fonctionne, sûr si dans la vue montrée (ainsi, l'enfant de viewFlipper montré) il y a une autre vue.

Exemple:

<LinearLayout> 
    <ViewFlipper> 
      <LinearLayout> //First View 

      </LinearLayout> 
      <LinearLayout> //Second View 

       <TextView/> 

      </LinearLayout> 
      <LinearLayout> //Third View 

      </LinearLayout> 
    </ViewFlipper> 
</LinearLayout> 

Si je suis dans la première vue (ou la troisième), les travaux de glissement fin; mais pas dans la seconde.

  1. Pourquoi?
  2. Comment réparer cela? Dois-je régler le Touch Listener sur toutes les "sous-vues"?

PS: I défini à l'auditeur de la LinearLayout (racine) contenant le viewFlipper.

+1

Avez-vous envisagé d'utiliser 'ViewPager' avec' Fragments' au lieu de 'ViewFlipper'? –

Répondre

0

J'ai compris 40% de votre question. S'il vous plaît, relisez votre question avant de la terminer. Je suis vraiment confus à propos de certaines choses. # 1 Utilisez-vous Views ou Fragments? Si vous utilisez des onglets, vous devriez utiliser des fragments! # 2 Changez-vous entre les fragments via un ViewFlipper, Swing/Horizontal Paging, en utilisant les onglets, ou tous les 3 simultanément. En réponse à votre deuxième question, si vous utilisez ViewFlipper, vous devez implémenter OnClickListener et quand un utilisateur clique sur le Flipper, l'application ira dans la méthode onClick. Si vous implémentez View.OnTouchListener, l'application ira dans la méthode onTouch (View v, événement MotionEvent). Notez les paramètres pour onTouch. Vous avez besoin d'un MotionEvent. ViewFlipper est le meilleur pour les robinets courts. MotionEvent est le meilleur pour les balayages.

Pour l'activité du ViewFlipper, vous avez besoin:

1) flippy = (ViewFlipper) findViewById(R.id.viewFlipper1);
2) flippy.setOnClickListener(this); //This is to make the ViewFlipper respond to clicks.
3) implements OnClickListener //This goes on top of your class (after “extends”).
4) Ensuite, lorsqu'un utilisateur clique sur le ViewFlipper, le programme ira à la méthode:

public void onClick(View arg0) {flippy.showNext();} 

En réponse à votre première question. Je suppose que votre question est la suivante:
1) Pourquoi ne puis-je pas utiliser ViewFlipper pour glisser entre plus de 2 éléments?
Voici comment. Voici un exemple de code pour une classe appelée Flippering.java:

import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.ViewFlipper; 

    public class Flippering extends Activity implements OnClickListener { 
     ViewFlipper flippy; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.h_swipe_neg_one); 
      flippy = (ViewFlipper) findViewById(R.id.viewFlipper1); 
      flippy.setOnClickListener(this); 
     } 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      flippy.showNext(); 
     } 

    } 

Voici le document XML correspondant:

<ViewFlipper 
     android:id="@+id/viewFlipper1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="Clicked"> 

     <ImageView 
      android:id="@+id/imageView1a" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:src="@drawable/autumn_leaves" > 
     </ImageView> 

     <ImageView 
      android:id="@+id/imageView2a" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:src="@drawable/azul" > 
     </ImageView> 

     <ImageView 
      android:id="@+id/imageView3a" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:src="@drawable/big_mountain" > 
     </ImageView> 
    </ViewFlipper> 

</LinearLayout> 

Notez que android:src="@drawable/big_mountain" fait référence à des images que j'ai dans mes res/drawable- dossier hdpi. En outre, au lieu de <ImageView>, vous pouvez utiliser un <TextView>.Ainsi, par exemple:

<ViewFlipper> 
    <TextView></TextView> 
    <TextView></TextView> 
    <TextView></TextView> 
</ViewFlipper> 

De plus, je doute fortement votre problème n'a rien à voir avec ActionBarSherlock.