【发布时间】:2017-06-24 22:08:43
【问题描述】:
我正在尝试实现一些聊天活动。
消息必须从旧消息到最新消息(新消息在底部,旧消息在我的 ListView 顶部),因为我在我的布局中使用android:transcriptMode="alwaysScroll" 和android:stackFromBottom="true"。
当用户向上滚动时,应该从我的 SQL 数据库中的旧消息更新 ListView。这是一些代码:
public void onLoadFinished(Loader loader, Object data) {
final Cursor cursor = (Cursor)data;
if(cursor.getCount() > API_REQUEST_COUNT) {
this.lsView.setStackFromBottom(false);
}
this.mAdapter.changeCursor(cursor);
if(this.mAdapter.getCount() > 0) {
this.isLoading = false;
}, 500);
}
}
这就是我实现加载更多功能的方式:
this.lsView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int currentItemPosition = totalItemCount - firstVisibleItem;
// TODO without refreshing cache :-(
if(totalItemCount == 0 && !isLoading) {
isLoading = true;
if(getLoaderManager().getLoader(loaderId) != null) {
getLoaderManager().restartLoader(loaderId, getArguments(), ConversationFragment.this);
} else {
getLoaderManager().initLoader(loaderId, getArguments(), ConversationFragment.this);
}
// TODO pagination
ApiManager.getInstance().getDialog(dialogId, pageNum);
}
if(!isLoading && totalItemCount != 0 && currentItemPosition == (API_REQUEST_COUNT * pageNum) - 1) {
pageNum++;
ApiManager.getInstance().getDialog(dialogId, pageNum);
}
}
});
问题是,当我更新我的适配器ListView 时向上滚动,但我希望他冻结在当前位置。
有人可以帮忙吗?
【问题讨论】:
标签: android listview android-listview android-cursor