如何为ListViewAdapter排序或重新排序MergeCursor

时间:2016-06-28 11:24:28

标签: java android sqlite android-studio cursor

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

enter image description here

正如您所看到的,问题是帖子未按日期/ 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进行排序?

1 个答案:

答案 0 :(得分:0)

我想没有办法对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排序。没有这样的方法可以排序MERGECURSOR:)

三江源!