15

下から開始し、ユーザーがチャットの上端に達したときにさらにデータをロードする recyclerView を使用して、メッセージのような画面を作成しようとしています。しかし、私はこの奇妙な問題に直面しています。

私のrecyclerViewは、notifyDataSetChangedを呼び出すと一番上にスクロールします。このため、 onLoadMore が複数回呼び出されます。

これが私のコードです:

LinearLayoutManager llm = new LinearLayoutManager(context);
llm.setOrientation(LinearLayoutManager.VERTICAL);
llm.setStackFromEnd(true);
recyclerView.setLayoutManager(llm);

** アダプター内

 @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (messages.size() > 8 && position == 0 && null != mLoadMoreCallbacks) {
        mLoadMoreCallbacks.onLoadMore();
    }

** 活動中

@Override
public void onLoadMore() {
    // Get data from database and add into arrayList
      chatMessagesAdapter.notifyDataSetChanged();
}

recyclerView が一番上にスクロールするだけです。一番上までスクロールすると、この問題は解決されます。この問題の原因を突き止めるのを手伝ってください。前もって感謝します。

4

10 に答える 10

1

を呼び出さないnotifyDataSetChanged()RecyclerViewください。notifyItemChanged()notifyItemRangeChanged()、などの新しいメソッドを使用しnotifyItemInserted()ます...そして、使用する場合notifyItemRangeInserted()-

その後メソッドを呼び出さないでくださいsetAdapter()..!

于 2017-04-16T07:16:21.957 に答える
0

特定の範囲でアイテムを通知する必要があります

   @Override
    public void onLoadMore() {
        // Get data from database and add into arrayList
        List<Messages> messegaes=getFromDB();
        chatMessagesAdapter.setMessageItemList(messages);
        // Notify adapter with appropriate notify methods
        int curSize = chatMessagesAdapter.getItemCount();
        chatMessagesAdapter.notifyItemRangeInserted(curSize,messages.size());

    }
于 2017-04-19T07:08:24.750 に答える
0

以下のように、特定の範囲でアイテムを通知する必要があります。

       @Override
        public void onLoadMore() {
            // Get data from database and add into arrayList
            List<Messages> messegaes=getFromDB();
            chatMessagesAdapter.setMessageItemList(messages);
            // Notify adapter with appropriate notify methods
            int curSize = chatMessagesAdapter.getItemCount();
            chatMessagesAdapter.notifyItemRangeInserted(curSize,messages.size());

        }
于 2017-04-18T05:47:51.687 に答える