Java Recyclerview使用stackFromEnd动态加载更多数据
嘿,伙计们,我正在使用一个聊天应用程序的回收器视图,它需要有点不同于常规的无限滚动。我想在向上滚动时加载更多数据。我在这里发现了很多东西,但没有什么能帮我解决问题。我使用的是SQLCipher数据库,只想在用户向上滚动时加载更多(旧的)聊天项目 所以我想做的是:Java Recyclerview使用stackFromEnd动态加载更多数据,java,android,dynamic,android-recyclerview,Java,Android,Dynamic,Android Recyclerview,嘿,伙计们,我正在使用一个聊天应用程序的回收器视图,它需要有点不同于常规的无限滚动。我想在向上滚动时加载更多数据。我在这里发现了很多东西,但没有什么能帮我解决问题。我使用的是SQLCipher数据库,只想在用户向上滚动时加载更多(旧的)聊天项目 所以我想做的是: 例如,我想加载20个我在这里执行的项目: ArrayList<Message> getNextMessages(String ChatID, int alreadyLoadedMessages) { ArrayList<
ArrayList<Message> getNextMessages(String ChatID, int alreadyLoadedMessages) {
ArrayList<Message> messageList = new ArrayList<>();
String[] args = {ChatID};
Cursor cursor = database.query(MessageDBHelper.DATABASE_NAME,
columns, MessageDBHelper.COLUMN_USER_ID + "=?", args, null, null, null);
cursor.moveToLast();
int loaded = alreadyLoadedMessages;
while (loaded > 0 && !cursor.isBeforeFirst()) {
cursor.moveToPrevious();
loaded--;
}
while (!cursor.isBeforeFirst() && loaded <= LOADED_ITEMS) {
messageList.add(0, cursorToMassage(cursor));
cursor.moveToPrevious();
loaded++;
}
//notify scrollview that we are finished with data loading
Chat.loading = false;
return messageList;
}
ArrayList getNextMessages(字符串ChatID,int-alreadyLoadedMessages){
ArrayList messageList=新建ArrayList();
字符串[]args={ChatID};
Cursor Cursor=database.query(MessageDBHelper.database_NAME,
列,MessageDBHelper.COLUMN\u USER\u ID+“=?”,args,null,null,null);
cursor.moveToLast();
int loaded=alreadyLoadedMessages;
while(已加载>0&!cursor.isBeforeFirst()){
cursor.moveToPrevious();
加载--;
}
而(!cursor.isBeforeFirst()&&L
messageArrayList.addAll(messageDataSource.getNextMessages(KontaktNummer, currentLoadedItems));
currentLoadedItems = currentLoadedItems + MessageDataSource.LOADED_ITEMS;
layoutManager = new LinearLayoutManager(this);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
final RecyclerView.Adapter adapter = new CustomAdapterChat(this, messageArrayList);
recyclerView.setAdapter(adapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = layoutManager.getChildCount();
int totalItemCount = layoutManager.getItemCount();
int pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
int sumn = visibleItemCount + pastVisiblesItems;
if (!loading) {
if ((visibleItemCount + pastVisiblesItems) < 10) {
loading = true;
messageArrayList.addAll(0, messageDataSource.getNextMessages(KontaktNummer, currentLoadedItems));
currentLoadedItems = currentLoadedItems + MessageDataSource.LOADED_ITEMS;
//TODO:notify adpater
}
}
}
});