【问题标题】:how to populate android-viewFlow from SQLite database correctly如何正确地从 SQLite 数据库填充 android-viewFlow
【发布时间】:2011-08-30 18:37:30
【问题描述】:

我正在尝试在我的应用中实现 android-viewFlow (https://github.com/pakerfeldt/android-viewflow),但是我很难正确填充每个页面。

问题是我有 SQLite 数据库,并且我需要有多个视图来匹配与我的查询匹配的行数(通常在 9 到 21 之间),并且每个视图都应该显示来自该确切值的值行。

在 viewFlow 中,有一个“sidebuffer”字段,它将根据这个“sidebuffer”的值加载视图数量。那么,如何从 SQLite 填充适配器并强制“sidebuffer”匹配我的行数。 (如果“sidebuffer = 3”,则加载的视图为 2 * 3 + 1,如果为 5,则加载 2 * 5 + 1)。

将“sidebuffer = 100”硬编码是否有不利之处,即使我永远不会显示那么多视图?

我使用 viewFlow 而不是 Android 的兼容性 viewPager 的原因是我需要实现的标题指示器。

提前致谢!

现在,我在 viewFlow.java 中创建了一个新方法

public setSidebuffer(int sidebuffer) {
    mSideBuffer = sidebuffer;
    init();
}

在我设置 viewFlow 的 main_activity 中,我调用方法如下:

viewFlow = (ViewFlow) findViewById(R.id.viewflow);
AndroidVersionAdapter adapter = new AndroidVersionAdapter(this);
viewFlow.setAdapter(adapter, 3);
viewFlow.setSidebuffer(adabter.getSize() / 2);    // THIS IS THE THING

【问题讨论】:

    标签: android sqlite populate


    【解决方案1】:

    我担心将侧缓冲区设置为大于适配器中元素的数量可能会导致 FC。在这种情况下,我必须研究 android-viewflow 中的一个错误。无论如何,如此大的侧缓冲区将导致您的适配器为每个元素创建一个视图,因此可能会消耗大量内存。适配器的整个想法是仅在需要时加载视图。

    当您打算将完整缓冲区大小设置为适配器的大小时,我认为您从错误的角度处理问题。这不是它的用途。以这样的方式实现您的适配器,当调用 getView(...) 时,适配器将从您的数据库中检索正确的行,必要时扩展视图,并返回填充的视图。如果此过程相对较快,您可能会坚持使用较低的侧缓冲区,例如 2 或 3,因为用户将无法比将视图加载到视图流中的速度更快。这有意义吗?

    如果您更喜欢使用 ViewPager,您可能想看看https://github.com/JakeWharton/Android-ViewPagerIndicator 该库源自 android-viewflow 中为 ViewPager 启用指标的工作。也许 android-viewflow 将来也会支持它。

    【讨论】:

    • 感谢您的帮助。我只是想知道为什么,例如,如果我有 10 行要显示和侧缓冲区 3,第 8 个视图的位置会以某种方式为 0,而第 9 个视图的位置为 1 等等。所以我能想出的唯一解决方法是加载所有视图都放在一起。
    • 是的,经过大量的谷歌搜索后,我发现了你建议的同一个 Jake Wharton 的图书馆......并且发现它实际上非常好。虽然我不知道如何让 Eclipse 接受它作为外部库。甚至不接受导入它/示例项目......所以我不得不将文件复制到我的项目文件夹
    • 你在说什么索引/位置? ViewFlow 跟踪两个索引。一个用于适配器中的位置,一个用于加载视图列表中的索引。加载视图列表的大小通常为 2*sidebuffer + 1。
    • 嗨帕特里克,我在谈论我的适配器类中的位置。就像在您的示例项目中一样,我有一个包含 15 个字符串的静态字符串数组(在实际应用程序中,该数组应该从 db 填充)......并且在 getView 方法中,我正在膨胀一个视图并尝试设置文本以匹配数组索引与位置(当前显示的页面),但当页面显示超出侧缓冲区时,一切都会出错。因此,当侧缓冲区值为 3 时,位置获取值如下:0、1、2、3、4、5、6、0、1...所以我永远不会从数组中获取 idx 大于 6
    • 那么,即使数组中有更多元素,适配器中的 getView(...) 总是在 0-6 之间获得位置?这看起来很奇怪,没有什么是我无法重现的。我尝试在视图流中使用标题示例并将侧缓冲区设置为 1。当按预期滚动时,我仍然得到所有视图。请尝试标题示例并将sidebuffer降低到1,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多