2016-06-28 59 views
0

我正在为我的案例研究开发一个简单的社交媒体。我能够从用户关注的人员中检索帖子。下面是截图:如何对ListViewAdapter的MergeCursor进行排序或重新排序

enter image description here

正如你所看到的,问题是,职位没有按照日期/编号的顺序排列。相反,它是根据用户关注的人进行分类的。这是因为我只使用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

不要使用MergeCursor ...添加'getAllFollowingFeeds'并使用INNER JOIN那里 – Selvin

+0

谢谢你的回答:)我已经设法解决了我的问题,你给了我一个想法来改变我的查询:) @Selvin –

回答

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或feed_userid = 2或feed_userid = 4或者feed_userid = 5

只是为了让那些与我有同样问题的人明白,这是关于MergeCursor排序。有没有这种方法来排序MERGECURSOR :)

谢谢!

相关问题