android - 维护一个 ListView,其中每个列表项都具有一对多关系

标签 android sqlite android-listview android-cursoradapter android-cursorloader

我的应用程序的设置方式是我有一个 ListView,由 CursorLoader 维护,其中包含用户发布的帖子。每个帖子都有与之关联的用户评论。每个列表项在底部都有一个自定义 TextView ,可以在其中滚动评论(向右或向左滑动)。在每个自定义 TextView 中,都有一个与其特定帖子相关的评论列表。它有点像 Google+ 应用程序上的评论,只是项目是可滚动的。评论存储在与帖子不同的数据库表中。

我遇到的问题是,每次调用 BindView 时,我都会查询数据库并检索带有相关注释的游标,并将其添加到自定义 TextView 列表中。查询每个项目的评论数据库表似乎效率很低。所以我想知道是否有一种理想的方法来处理这个问题。我的代码看起来像:

public void bindView(View view, Context context, Cursor cursor)
    final String rowid = cursor.getString(cursor.getColumnIndexOrThrow(Database.ROWID));

    Cursor commentcursor = c.getContentResolver().query(DatabaseProvider.CONTENT_URI_COMMENTTABLE,   freeWriteCommentColumns, Database.PARENTPOSTROWID + " =?", new String[]{rowid}, null);

    commentcursor.moveToFirst();
    while (commentcursor.isAfterLast() == false){
            //get comment
            //add to comment text view list
            }

我已经研究过 CursorJoiners,但这似乎没有用。我玩过 JOINS 但这使得行数比需要的多。我目前正在玩弄一个用于在创建适配器并将其设置为全局变量时创建的注释表游标的容器。这似乎是一个不错的途径,因为我不必每次都重新查询。我只是不确定如何处理这种情况。

最佳答案

我知道你试过了,但这是要走的路。我遇到了几乎相同的问题,甚至是一个更大的问题,因为我的问题是 JOIN,然后是 MergeCursor。但是,让我们回到您的问题:bindView() 在 UI 上被调用,而您在 UI 线程上进行数据库调用,这是不好的做法,最重要的是您在游标上运行。 我将加入对帖子的查询并在加载的 SQL 级别连接评论,然后我将只对帖子和评论使用一个游标,一切都会好得多。

如何在 SQL 级别连接字符串?所有的评论一起?好吧,我将查看并编辑我的答案。

关于android - 维护一个 ListView,其中每个列表项都具有一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001444/

相关文章:

android - Google Awareness Snapshot API 已弃用的替代品

android - TextView 中的多个点击跨度

android - mapview 在印度工作但不在瑞士工作

android - 从内联类重新加载 ListView

android - ListView末尾的三个点

android - 如何为 android 21 api 及更高版本创建资源文件夹?

python - "No matching distribution found for sqlite3"与 python3 和 virtualenv

django - 如何在 Django==2.1 中删除表(sqlite3)?

swift - 如何知道 FMDB 查询是否成功

android - 编辑扩展列表中的文本