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

时间:2014-04-11 00:26:00

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

我的应用程序的设置方式是我有一个由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
            }

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

1 个答案:

答案 0 :(得分:1)

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

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