Zia*_*Zia 6 pagination android listview android-contentprovider android-cursorloader
我的ChatActivity的OnCreateLoader和onLoadFinished是:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader loader = new CursorLoader(this,
DataProvider.CONTENT_URI_MESSAGES,
new String[]{
DataProvider.KEY_ID,
DataProvider.KEY_PHONE_NUMBER,
DataProvider.KEY_USER,
DataProvider.KEY_FLAG,
DataProvider.KEY_DATE_TIME,
DataProvider.KEY_CONTENT
},
"phone_number=?", new String[]{phoneNo_other}, null);
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mChatListBuilderAdapter.swapCursor(data);
}Run Code Online (Sandbox Code Playgroud)
此代码对于整个chatList都适用。但是我需要第一次加载ex:20个项目,并且在顶部的每个反向滚动上都加载另外20个项目,就像WhatsApp一样显示在列表中。
是否可以使用如下所示的rawquery来实现此目的?使用以下方法,我得到了预期的数据,但是无法返回Loader<Cursor>类型数据,
public Loader<Cursor> loadInitialItems(String phone_number, int limit){ //// limit 100, 200` -- get 200 records beginning with row 101 //
SQLiteDatabase db = this.getWritableDatabase();
String queryToGetInitialData ="SELECT * FROM (SELECT * FROM "+MYDATABASE_TABLE+" WHERE "+KEY_PHONE_NUMBER+" = ? ORDER BY "+KEY_ID+" DESC LIMIT "+limit+") ORDER BY "+KEY_ID+" ASC";
Cursor cursor = db.rawQuery(queryToGetInitialData, new String[] { phone_number });
String chatContent = "";
if (cursor.moveToFirst()) {
do {
chatContent = cursor.getString(cursor.getColumnIndex(DataProvider.KEY_CONTENT));
Log.d(TAG,"chatContent from DB::"+chatContent);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return (Loader<Cursor>) cursor; //Problem is here, this return is inappropriate
}
Run Code Online (Sandbox Code Playgroud)
onScroll到LoadMore机制的代码如下:
messagesList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0) {
if(!flag_loading) {
flag_loading = true;
loadNextChatItems();
}
}
}
});
Run Code Online (Sandbox Code Playgroud)