ViewFlipper 与 Fragments

2023-11-23

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

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

由于 ViewFlipper 本质上会切换可见性标志,并且当您添加/删除片段时,片段实际上会替换视图层次结构,因此我是否可以通过使用片段来获得性能提升?

有人可以给我们更多关于这一点的见解吗?

Thanks!


EDIT:我这里说的是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 所说的相反,您可以通过支持库将 Fragments 与 Android v4 及更高版本一起使用;看http://developer.android.com/sdk/compatibility-library.html有关详细信息,但它实际上只涉及将 jar 文件放入 /libs 目录中。

顺便说一句,请注意,对于 ViewPager,每个“页面”本身就是一个 Fragment。

至于性能是否有提升,那就要看你对比的是什么了。我强烈建议您在担心性能问题之后尝试 ViewPager。正如 Donald Knuth 所说,“我们应该忘记小效率,大约 97% 的情况下:过早的优化是万恶之源。”

无论如何,如果您有大量页面,请参阅http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html以获得更合适的适配器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ViewFlipper 与 Fragments 的相关文章

随机推荐

  • Cookie 过期在 C# 中不起作用

    我尝试使用 C 4 0 和以下代码制作持久 cookie HttpCookie AssoCookie new HttpCookie AssociateCode AssociateCode AssoCookie Expires DateTim
  • GZipStream - 即使使用刷新,写入也不写入所有压缩数据?

    我在针对 Net 3 5 的 gzipstream 方面遇到了一个棘手的问题 这是我第一次使用 gzipstream 但是我根据许多教程进行了建模 包括here我仍然被困住了 我的应用程序将数据表序列化为 xml 并插入到数据库中 将压缩数
  • Python 3 中的 PyClass_New 等效项是什么?

    之前我使用 C API 创建了一些 Python 类 当我要使用 Python 3 构建旧项目时 它会给出以下编译错误 PyClass New was not declared in this scope Py InitModule was
  • 在这种情况下是否有必要调用flush()(JPA接口)?

    因为调用flush 来让每个实体从内存持久化到数据库 因此 如果我使用调用太多不必要的flush 可能会花费很多时间 因此对于性能来说不是一个好的选择 这是一个场景 我不知道什么时候调用flush Order and Item have B
  • 从初始化列表进行就地向量构造(对于带有构造函数参数的类)[重复]

    这个问题在这里已经有答案了 可能的重复 我可以列表初始化仅移动类型的向量吗 编辑1 请考虑重新开放投票 我的问题强调就地建设 移动构造是一种替代方案 但不是这个问题的目的 感谢您的回答 编辑2 由于我无法回答这个问题 它已关闭 我在这里发布
  • 根据任何选定列中的值对 data.table 进行子集化的有效方法[重复]

    这个问题在这里已经有答案了 假设我有一个包含 6 列的 data table library data table set seed 123 dt lt data table id 1 100 p1 sample 1 10 100 repl
  • 使用 Blazor 访问设备摄像头

    我有 Blazor Web Assembly PWA 如何打开设备本机摄像头 我正在尝试编写一个 PWA 来捕获和保存图片 EDIT 想要将捕获的图像以 jpeg 格式保存到 Azure Blob 存储中 您可以通过 HTML 输入来实现此
  • 如何使用 CSS 或 Javascript 创建选取框

    我需要创建两个跨越任意大小的浏览器窗口的选取框 一个带有重复图像 一个带有重复链接 选框项目需要从一开始就显示出来 而不需要几秒钟的时间才能出现在屏幕上 并且每个项目之间的距离大约为 20px 30px 当用户将鼠标悬停在其上时 选取框需要
  • AVAudioRecorder 不会在设备上录制

    这是我的方法 void playOrRecord UIButton sender if playBool YES NSError error nil NSString filePath NSBundle mainBundle pathFor
  • 解决应用内购买缺少促销代码的问题

    Apple 不提供应用内购买的促销代码 让用户免费尝试通过应用内购买解锁的功能或内容 同时遵守 Apple 开发者指南的最佳方式是什么 这个想法是允许一组特殊的用户 评论者 主要粉丝等 无需付费即可访问作为应用内购买提供的内容或功能 解决此
  • 在 Android Activity 中设置全屏亮度

    我正在使用这种方法将屏幕设置为全亮度 SuppressLint NewApi private void setFullBright if Build VERSION SDK INT gt Build VERSION CODES CUPCAK
  • Rails 4:跳过回调

    我的应用程序中有一个拍卖和一个投标对象 当有人按下出价按钮然后它调用投标创建创建出价的控制器 然后对拍卖对象执行一些其他操作 投标控制器 gt 创建 auction endtime auction auctiontimer auction
  • NSMutableArray addObject 不起作用

    我已宣布NSMutableArray categories在我的视图控制器 h 文件中 并为其声明一个属性 In the parser foundCharacters 的方法NSXMLParser在我的 m 文件中 我有以下代码 void
  • 制作简单的 Google Android Maps API v2 项目时 Android Studio 中的编译错误

    最近我迁移到了新Android Studio 集成开发环境基于IntelliJ 我遵循的指南是 https developers google com maps documentation android start 为了 基本 如何在 A
  • Android In App Update 在立即模式下下载 APK 后不安装 APK

    应用程序正在使用立即模式来更新应用程序 它开始下载 APK 但下载 APK 后 它永远不会安装 UI 挂起并显示下载进度 100 立即模式下没有反馈下载已完成 即时模式如何实现app自动下载 安装 重启 我正在使用以下模式以立即模式开始更新
  • C - 可移植地获取类型对齐

    我正在为一种非常简单的语言编写非常小的解释器 它允许简单的结构定义 由其他结构和简单类型组成 如 int char float double 等 我希望字段使用尽可能少的对齐方式 因此使用 max align t 或类似的东西是不可能的 现
  • XHTML 和 &(与号)的编码

    我的网站符合 XHTML Transitional 标准除了一件事 URL 中的 与号 按原样编写 而不是 amp 也就是说 我的页面中的所有 URL 通常都是这样的 a href http www example org page asp
  • 最好使用游标适配器或数组适配器

    我在数据库中存储了大约 100 个时间表 需要根据每周 下周 下个月 逾期时间表等要求基于 Listview 显示它们 是否可以在应用程序启动时加载所有计划并根据用户在阵列适配器中选择的选项 每周 逾期 每月等 显示它们 或者在运行时使用查
  • 管理 .NET 应用程序在终止/终止时正常关闭

    我们有一个具有许多前台线程的 NET 控制台应用程序 如果我们使用任务管理器终止进程或从 Windows 命令行发出killjob kill 是否有一种方法可以优雅地关闭应用程序 在 net 控制台应用程序中添加托管代码 例如拥有一个函数被
  • ViewFlipper 与 Fragments

    我有一个带有 ViewFlipper 的 Activity 它可以在一堆视图 页面 和我的数据之间翻转 我正在考虑使用fragments API 在我的视图之间切换 这样做有什么好处呢 由于 ViewFlipper 本质上会切换可见性标志