维护ListView,其中每个List项具有一对多关系

Pap*_*000 7 sqlite android android-listview android-cursorloader android-cursoradapter

我的应用程序的设置方式是我有一个由CursorLoader维护的ListView,由用户发布的帖子.每个帖子都有与之关联的用户评论.每个listitem底部都有一个自定义文本视图,可以滚动注释(使用向右或向左滑动).在每个自定义文本视图中,是与其特定帖子关联的注释列表.它类似于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
            }
Run Code Online (Sandbox Code Playgroud)

我已经研究过CursorJoiners,但这似乎并没有用.我玩过JOINS,但这会使行数大于它需要的数量.我正在玩一个注册表游标的持有者,该游标是在创建适配器时创建的并设置为全局变量.这似乎是一个不错的途径,因为我不必每次都重新查询.我只是不确定如何处理这种情况.

EE6*_*E66 1

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

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