CursorAdapter 滚动缓慢/不稳定

2023-12-23

我有一个 ListActivity,它使用 CursorAdapter 以表格格式绘制数据集。我最初使用 TableLayout(并绘制了整个表格),但我担心这会使用太多内存(并且绘制页面速度很慢),因此我现在正在研究使用 CursorAdapter。

活动主体的 XML 布局如下所示(请注意 Horizo​​ntalScrollView 的使用,这可能是一个原因):

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/layout_query_viewer">

    <TextView
        android:id="@+id/query_table_name"
        style="@style/ActivityTitle" />

    <HorizontalScrollView
        android:id="@+id/hsvMainContent"
        android:scrollbars="none"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <LinearLayout
            android:id="@+id/llMainContent"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <LinearLayout
                android:id="@+id/fixed_headers"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <ListView
                android:id="@android:id/android:list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"/>
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

CursorAdapter 看起来像这样:

private class QueryAdapter extends CursorAdapter {
    public QueryAdapter(Context context) {
        super(context, null);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        /*
         * I'm deliberately not inflating here as I'm synchronizing a remote
         * database, so I don't know how many columns my query will return.
         */
        LinearLayout layout = new LinearLayout(context);
        ViewHolder holder = new ViewHolder(cursor.getColumnCount());
        layout.setTag(holder);

        for (int i = 1; i < cursor.getColumnCount(); i++) {
            TextView cell = new TextView(context);

            holder.cells[i] = cell;

            cell.setBackgroundColor(Color.WHITE);
            cell.setMinimumWidth(mColumnWidths[i]);
            cell.setPadding(1, 1, 1, 1);

            layout.addView(cell);
        }

        return layout;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        ViewHolder holder = (ViewHolder)view.getTag();

        for (int i = 1; i < cursor.getColumnCount(); i++) {
            holder.cells[i].setText(cursor.getString(i));
        }
    }
}

static class ViewHolder {
    TextView[] cells;

    public ViewHolder(int size) {
        cells = new TextView[size];
    }
}

当我绘制整个表格时,我对滚动性能感到满意,但现在我已经切换到 CursorAdapter,滚动很不稳定(我的意思是不可接受的不稳定)。从逻辑上讲,CursorAdapter 方法在架构上似乎是正确的决定,但除非我可以解决滚动问题,否则我将不得不返回绘制整个表格。

有其他人经历过这种情况或者可以阐明我做错了什么吗?


我从 Android Market 下载了“SQLite Editor”(由 Speed Software 提供),发现它们的表格渲染非常流畅。我联系了开发人员,他们很友善地为我指明了正确的方向。

实际上,我最终使用了画布并在自定义视图中绘制了表格。与实现 CursorAdapter 解决方案相比,花费的时间并不长。

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

CursorAdapter 滚动缓慢/不稳定 的相关文章

随机推荐

  • Zend_Search_Lucene 与 SOLR

    我最近偶然发现了 Lucene 项目的 Zend Lucene 端口 我对 SOLR 有一点经验 所以我想知道它们两者之间有什么区别 特别是从性能和安装方面来看 据我所知 SOLR 需要在 Web 托管中运行 Tomcat serverle
  • XCode 调试器停止并在“停止”按钮上显示 SIGKILL

    我在 MacOS Lion 上使用 XCode 4 2 在模拟器中调试 iPhone iPad 应用程序时 我使用 XCode 工具栏上的 停止 按钮 产品 停止 来退出应用程序 此后 XCode 通常会打开 main m 文件 将执行指针
  • 如何获取DataTables中的页数

    我正在与数据表 http datatables net index我需要知道表当前包含的页数 这当然取决于每页的行数和总行数 并且可能会因用户操作而改变 有人知道如何访问这个值吗 我相信 iTotalPages 就是您所追求的 http d
  • 如何在 Julia 中将 Float64 矩阵转换为 RGB 通道矩阵?

    假设我有以下矩阵 img 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 随机化字符串[重复]

    这个问题在这里已经有答案了 我是 C 新手 所以不要因为我的愚蠢而责怪我 我正在开发一个应用程序 该应用程序应该随机化一个单词并给出它的长度 例如您写一个单词 Line 它会给您 iLen 目前我确信只有这部分有效 private void
  • 单元测试中的序列化异常

    我的 Visual Studio 2010 单元测试遇到问题 每当出现问题并抛出一种类型的异常时 UnitTestAdapter 就会抛出 SerializationExceptions 告诉我他无法反序列化抛出的异常 在我创建的单元测试中
  • 如何获取使用 asp .net 检查的 gridview 内的复选框的值

    我在 gridview 中使用复选框 我在第一个单元格中使用它 当我在运行时选择复选框时 我需要获取这些值 但是在选择或单击复选框时 它不是查找或值取为 FALSE 如何在 asp net 后端和 C 代码中编写
  • git 错误:无法将一些引用推送到远程

    我现在无法推动 尽管昨天我可以做到 当我使用git push origin master 我收到错误 git remote v origin https github com REDACTED git fetch origin https
  • 我们到底为什么要使用NoSQL? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 了解了 NoSQL 提供的一些优势 可扩展性 可用性等 后 我仍然不清楚为什么网站想要使用非关系数据库 我可以在这方面获得一些帮助 最好是有一个
  • 在具有日期时间索引的行之间执行计算并将它们放入新列中

    我有一个数据框 由这段代码生成 import pandas as pd import datetime as dt datarange pd date range 01 05 2018 00 00 00 periods 50 freq 4H
  • 当窗口打开时,window.close = true 如何?

    我正在单步执行代码 我意识到我无法关闭窗口 因为 DispHTMLWindow2 对象 close 属性仍然为 true if winObject closed true winObject close 问题是winObject close
  • 带有可选参数的 Groovy 闭包

    我想定义一个带有一个参数的闭包 我用it 有时我想向闭包传递另一个附加参数 我怎样才能做到这一点 您可以将第二个参数设置为默认值 例如 null def cl a b null gt if b null print Passed b the
  • “addEventListener”不适用于 Chrome 扩展程序

    我向窗口添加了一个 addEventListener 但它返回以下错误 未捕获的类型错误 无法在 EventTarget 上执行 addEventListener 需要 2 个参数 但仅存在 1 个 在 window addEventLis
  • 通过 sapply 使用多列作为变量

    我有一个dataframe我想应用一个函数 该函数获取三列的值并计算三个值之间的最小差异 dataset df lt data frame a sample 1 100 10 b sample 1 100 10 c sample 1 100
  • 如何从 select2 多选中的选项列表中删除选定的选项并按选定的顺序显示选定的选项

    我的表单中有 select2 多选字段 我想在选择该选项后从下拉列表中删除所选选项 如果从列表中删除它 则再次将其添加到列表中 而且添加的项目应该与他们选择的顺序相同 当前的 select2 4 0 不会删除选定的项目 而是按照选定的项目在
  • 字符串参数“migrationId”不能为空

    如果这个问题已经得到解答 请提前道歉 但我老实说 我已经深入挖掘 找不到与此错误相关的任何内容 简而言之 我无法在 ASP NET Core 1 1 2 项目中首先使用代码对数据库进行任何更新 它抛出异常 因为它缺少一个参数 我猜这与 PM
  • JVM 将内存发送回操作系统[重复]

    这个问题在这里已经有答案了 我有一个关于 JVM 内存管理的问题 至少对于 SUN 来说 我想知道如何控制 JVM 将未使用的内存发送回操作系统 在我的例子中是 Windows 我写了一个简单的java程序来说明我的期望 使用 Dcom s
  • 如何在MySQL Workbench中生成整个数据库脚本?

    我想获取整个数据库 在哪里可以找到数据库文件 有没有一种方法可以将整个数据库的所有数据写入一个文本文件 如 SQL Server 中的文件 如何在 Workbench 中为数据库生成 SQL 脚本 In 中央工作台 默认的 主页 选项卡 连
  • Apache Spark 无法创建临时目录

    我是 Apache Spark 的新手 尝试从我的应用程序 tomcat 创建 SparkConf 我注意到以下错误 ERROR RMI TCP Connection 4 127 0 0 1 DiskBlockManager logErro
  • CursorAdapter 滚动缓慢/不稳定

    我有一个 ListActivity 它使用 CursorAdapter 以表格格式绘制数据集 我最初使用 TableLayout 并绘制了整个表格 但我担心这会使用太多内存 并且绘制页面速度很慢 因此我现在正在研究使用 CursorAdap