无业游民

千里之行始于足下

导航

不要忽视ViewFlipper

当我们需要实现多标签页程序的时候,相信很多人首先会想到用TabActivity来解决。没错,TabActivity就是用来解决多标签程序的。但其实,我们真的有必要一定要用TabActivity来解决吗?尤其是当多标签页程序里面嵌套的子Activity又是多标签的时候。这里我要介绍的是我比较钟爱的ViewFlipper。

 

实现多标签页程序的时候,通常都会使用TabHost,然后把TabWidget的visibility属性设置为gone(很多人都觉得原生的tab太丑,且现在大多数的UI都在模仿iPhone上面的UI,tab放在底部),而TabWidget的功能则用RadioGroup来实现。用TabActivity来实现的程序易于维护,因为每个页面都分别到了每个子Activity里面实现。但是可能有些同志会想当然的看到多标签就用TabActivity, 如果TabActivity里面的子Activity又继承了TabActivity,在监听按键的时候系统将不知道该返回到哪层,导致出错,这样的结果显然不是我们期望看到的。如果需要在子Activity里面实现多标签,我们可以用ViewFlipper来实现。布局代码大致如下:

<RadioGroup> </RadioGroup>

<ViewFlipper

        android:animationCache="false"
        android:alwaysDrawnWithCache="false" android:drawingCacheQuality="high"
        android:persistentDrawingCache="none"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:inAnimation="@anim/push_in" android:outAnimation="@anim/push_out">
        <include layout="@layout/xxx0" />
        <include layout="@layout/xxx1" />
        <include layout="@layout/xxx2" />
    </ViewFlipper>

在子Activity里面用ViewFlipper来实现页面的切换显然要比再继续继承TabActivity明智得多,嵌套越深越是容易出现问题

 

ViewFlipper比较适用于布局切换时动画效果要求较高(inAnimation和outAnimation分别控制下一个页面的进入动画和当前页面的退出动画),各个布局间传递数据比较频繁。用ViewFlipper实现时,很显然所有的代码都是在一个Activity里面实现了,既然都在一个Activity里面,各个页面间的数据传递当然比在Activity间用Intent或者Broadcast来传递数据方便的多,但所有页面逻辑代码写在一个Activity里面带来的问题显然就是可维护性不好。

 

一个页面需要用一个Activity来实现,在我看来,这不是什么准则,如果逻辑代码不是很复杂,我更倾向于把所有页面逻辑代码写在一个Activity里面(关键是我喜欢控制页面的进出动画效果),毕竟大多数手机程序也大不到哪去,维护起来也不是什么难事。但是如果逻辑代码很复杂,而且需要很好的扩展性,最好还是分开来实现,这样后期的维护和升级也相对更轻松些,毕竟一个产品能否成功,升级和维护还是占很大的比例的。

posted on 2011-11-16 22:36  PeterHuang  阅读(2614)  评论(3编辑  收藏  举报