【问题标题】:How to sort or reorder MergeCursor for ListViewAdapter如何对 ListViewAdapter 的 MergeCursor 进行排序或重新排序
【发布时间】:2016-06-28 11:24:28
【问题描述】:

我正在为我的案例研究开发一个简单的社交媒体。我能够从用户关注的人那里检索到帖子。截图如下:

如您所见,问题在于帖子未根据日期/ID 排序。相反,它是根据用户关注的人进行排序的。这是因为我只使用mergecursor 合并游标。这是我的代码的一部分:

    ListView listviewFeed = (ListView) findViewById(R.id.listviewFeed);
    Cursor cursorFeed = DataAdapters.getFeed(dbHelper, strUserID);
    //This code is for retrieving user's own posts

    Cursor cursorFollowing = DataAdapters.getFollowing(dbHelper,strUserID);
    //This code is for retrieving the followed users.

    if(cursorFollowing.getCount()>0) {
        for (int intCtr = 0; intCtr < cursorFollowing.getCount(); intCtr++) {
            int intUseridI = cursorFollowing.getColumnIndex(Tables.FollowTable.COLUMN_USERID);
            String strUseridI = cursorFollowing.getString(intUseridI);

            Cursor cursorFollowingFeed = DataAdapters.getFeed(dbHelper, strUseridI);
            \\This code is for retrieving the posts of the people the user follows.

            if(intCtr>0)
            {
                mergeCursor = new MergeCursor(new Cursor[]{mergeCursor, cursorFollowingFeed});
            }else {
                mergeCursor = new MergeCursor(new Cursor[]{cursorFeed, cursorFollowingFeed});
            }
            //This code is for merging the cursors.

            if (intCtr + 1 == cursorFollowing.getCount()) {
                cursorFollowing.close();
            } else {
                cursorFollowing.moveToNext();
            }
        }
        ListViewAdapterMeasurement adapterMeasurement = new ListViewAdapterMeasurement(this, mergeCursor);
        listviewFeed.setAdapter(adapterMeasurement);
    }else
    {
        ListViewAdapterMeasurement adapterMeasurement = new ListViewAdapterMeasurement(this, cursorFeed);
        listviewFeed.setAdapter(adapterMeasurement);
    }

一切正常。我只想按日期或 ID 对帖子进行排序。

有没有办法对 MergeCursor 进行排序?

【问题讨论】:

  • 不要使用 MergeCursor ... 添加 getAllFollowingFeeds 并在那里使用 INNER JOIN
  • 谢谢你的回答 :) 我已经设法解决了我的问题,你给了我一个改变我的查询的想法 :) @Selvin

标签: java android sqlite android-studio cursor


【解决方案1】:

我想没有办法对 MergeCursor 进行排序,所以我尝试考虑其他方式。

我这样更改了我的查询:

public static Cursor getFeed (DBHelper dbHelper, String strUserID)
{
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursorFollowing = getFollowing(dbHelper,strUserID);

    String strQuery = "SELECT * FROM feed_tbl WHERE "+ Tables.FeedTable.COLUMN_USERID + "="+strUserID;
    if(cursorFollowing.getCount()>0)
    {

        for(int intCtr=0;intCtr<cursorFollowing.getCount();intCtr++)
        {
            int intUseridI = cursorFollowing.getColumnIndex(Tables.FollowTable.COLUMN_USERID);
            String strUseridI = cursorFollowing.getString(intUseridI);
            String strConcatQuery = " OR "+ Tables.FeedTable.COLUMN_USERID + "="+strUseridI;

            if (intCtr + 1 == cursorFollowing.getCount()) {
                cursorFollowing.close();
            } else {
                cursorFollowing.moveToNext();
            }
            strQuery = strQuery +""+strConcatQuery;
            Log.v(TAG,strQuery);

        }
    }
    Cursor cursor = db.rawQuery(strQuery+" ORDER BY "+ Tables.FeedTable.COLUMN_ID + " DESC",null);
    if (cursor != null) {
        cursor.moveToFirst();
    }
    return cursor;
}

日志标签上的结果是这样的:

V/FeedMe:SELECT * FROM feed_tbl WHERE feed_userid=1 OR feed_userid=2 OR feed_userid=4 OR feed_userid=5

只是为了让那些对 MergeCursor 排序有同样问题的人清楚。没有这样的方法来排序合并者:)

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2021-03-07
    • 2020-02-19
    • 2015-12-29
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多