【问题标题】:ActionBarSherlock Tab - SlideActionBarSherlock 选项卡 - 幻灯片
【发布时间】:2012-09-08 10:41:20
【问题描述】:

我正在使用 Jake Wharton 的 ActionBarSherlock;在我的一项活动中,我使用标签导航。 而且,我有一个 ViewFlipper 来管理一些视图。

但是,我希望用户能够在选项卡之间滑动。

如果在显示的视图(因此,显示的 viewFlipper 的子视图)中有另一个视图,它是有效的。

例子:

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

          </LinearLayout>
          <LinearLayout> //Second View

               <TextView/>

          </LinearLayout>
          <LinearLayout> //Third View

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

如果我在第一个视图(或第三个)中,滑动效果很好;但不是在第二个。

  1. 为什么?
  2. 如何解决?我应该将 Touch Listener 设置为所有“子视图”吗?

PS:我将侦听器设置为包含 viewFlipper 的(根)LinearLayout。

【问题讨论】:

  • 您是否考虑过使用ViewPagerFragments 而不是ViewFlipper

标签: android tabs actionbarsherlock slide


【解决方案1】:

我理解了您问题的 40%。请在登顶之前校对您的问题。我真的对几件事感到困惑。 #1 你使用的是视图还是片段?如果你使用标签,你应该使用片段! #2 您是通过 ViewFlipper、Swiping/Horizo​​ntal Paging、使用 Tabs 还是同时使用所有 3 个在 Fragments 之间切换。

回答您的第二个问题,如果您使用的是ViewFlipper,您需要实现OnClickListener,当用户点击Flipper 时,应用会进入onClick 方法。如果你实现 View.OnTouchListener,应用程序将进入方法 onTouch(View v, MotionEvent event)。注意 onTouch 的参数。您需要一个 MotionEvent。 ViewFlipper 最适合短按。 MotionEvent 最适合滑动。

为了激活 ViewFlipper,您需要:

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) 那么当用户真正点击ViewFlipper时,程序会转到方法:

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

回答您的第一个问题。我猜你的问题是这样的:
1) 为什么我不能使用 ViewFlipper 在 2 个以上的项目之间滑动?
就是这样。这是一个名为 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();
        }

    }

下面是对应的 XML 文档:

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

请注意,android:src="@drawable/big_mountain" 指的是我的 res/drawable-hdpi 文件夹中的图像。此外,您可以使用&lt;TextView&gt;,而不是&lt;ImageView&gt;。比如:

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

此外,我非常怀疑您的问题与 ActionBarSherlock 有什么关系。

【讨论】: