ViewFlipper与片段

时间:2012-01-25 19:33:56

标签: android android-fragments viewflipper

我有一个带有ViewFlipper的Activity,可以在一堆视图(页面)与我的数据之间翻转。

我正在考虑使用片段API在我的视图之间切换。这样做有什么好处?

我是否可以通过使用片段看到性能提升,因为ViewFlipper实际上切换了可见性标志,并且在添加/删除视图层次结构时片段实际上会替换视图层次结构?

有人可以给我们更多的见解吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

编辑:我在这里谈论的是ViewPager,而不是ViewFlipper。

使用ViewPager的好处是它使用起来非常简单。您只需创建一个FragmentPagerAdapter并填写几个简单的字段。下面是我编写的一个示例,用于显示从父类传递的项目。

public static class DashboardPagerAdapter extends FragmentPagerAdapter {

    private static final int NUM_ITEMS_PER_SCREEN = 12;

    private List<View> mAllItems;
    private int mNumScreens;

    public DashboardPagerAdapter(FragmentManager fm, List<View> allItems) {
        super(fm);
        mAllItems = allItems;
        mNumScreens = (int) Math.ceil(mAllItems.size()
                / (float) NUM_ITEMS_PER_SCREEN);
        Log.d(TAG, "num screens: " + mNumScreens);
    }

    @Override
    public int getCount() {
        return mNumScreens;
    }

    @Override
    public Fragment getItem(int position) {
        DashboardScreenFragment screen = DashboardScreenFragment
                .newInstance();

        for (int i = position * NUM_ITEMS_PER_SCREEN; i < (position + 1)
                * NUM_ITEMS_PER_SCREEN; i++) {
            if (i >= mAllItems.size()) {
                break;
            }
            screen.addChild(mAllItems.get(i));
        }
        return screen;
    }
}

设置起来非常简单:

    final DashboardPagerAdapter adapter = new DashboardPagerAdapter(
            getFragmentManager(), mAllButtons);

与@ sebap123所说的相反,您可以在支持库中使用Android v4及更高版本的片段;有关详细信息,请参阅http://developer.android.com/sdk/compatibility-library.html,但它实际上只是将jar文件放在/ libs目录中。

顺便说一句,请注意,使用ViewPager,每个“页面”本身就是一个片段。

至于是否有性能改进,这取决于你要比较的内容。我强烈建议您在考虑性能问题后尝试使用ViewPager。正如唐纳德克努特所说:“我们应该忘记效率低下,大约97%的时间说:过早的优化是所有邪恶的根源。”

在任何情况下,如果您有大量页面,请参阅http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html以获取更合适的适配器。