Java Recyclerview使用stackFromEnd动态加载更多数据

Java Recyclerview使用stackFromEnd动态加载更多数据,java,android,dynamic,android-recyclerview,Java,Android,Dynamic,Android Recyclerview,嘿,伙计们,我正在使用一个聊天应用程序的回收器视图,它需要有点不同于常规的无限滚动。我想在向上滚动时加载更多数据。我在这里发现了很多东西,但没有什么能帮我解决问题。我使用的是SQLCipher数据库,只想在用户向上滚动时加载更多(旧的)聊天项目 所以我想做的是: 例如,我想加载20个我在这里执行的项目: ArrayList<Message> getNextMessages(String ChatID, int alreadyLoadedMessages) { ArrayList<

嘿,伙计们,我正在使用一个聊天应用程序的回收器视图,它需要有点不同于常规的无限滚动。我想在向上滚动时加载更多数据。我在这里发现了很多东西,但没有什么能帮我解决问题。我使用的是SQLCipher数据库,只想在用户向上滚动时加载更多(旧的)聊天项目

所以我想做的是:

  • 例如,我想加载20个我在这里执行的项目:

    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
    
                }
            }
        }
    
    });