Добавление данных в recyclerView плавно до достижения нижней части списка - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать свой аналог пейджинговой библиотеки Google. Я сделал что-то вроде этого:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull final RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0) //check for scroll down
                {
                    visibleItemCount = layoutManager.getChildCount();
                    totalItemCount = layoutManager.getItemCount();
                    pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();

                    if (loading) {
                        if (visibleItemCount + pastVisiblesItems >= totalItemCount && !recyclerView.canScrollVertically(1)) {
                            loading = false;
                            /*if (next_url != null) {
                                getMessages(type, a_token, Integer.parseInt(Uri.parse(next_url).getQueryParameter("offset")));
                                ms.setM_offset(Integer.valueOf(Uri.parse(next_url).getQueryParameter("offset")));
                            }*/
                        }
                    }


                }

                if (dy >= 5) {
                    loading = true;
                }

                if (dy < 0) {
                    visibleItemCount = layoutManager.getChildCount();
                    pastVisiblesItems = layoutManager.findLastVisibleItemPosition();

                    if (loading) {
                        if (pastVisiblesItems - visibleItemCount <= 0 && !recyclerView.canScrollVertically(-1)) {
                            loading = false;


                        }
                    }
                }

            }
        });

и в целом все работает хорошо, я отправляю запрос, когда достигаю нижней части списка, но вижу очень странную анимацию добавления, и мне интересно воссоздать эту логику предварительной загрузки данных. Вот мой адаптер:

public class myAdapter extends RecyclerView.Adapter<myAdapter.SenderHolder> {

    private Integer type, position;
    private ArrayList<MessageModel> messageList;
    private Context ctx;
    private static final String keyOutboundMessageId = "outbound_message_id";
    private static final String keyIncomingMessageId = "incoming_message_id";
    private static final String keyDraftMessageId = "draft_message_id";

    myAdapter(ArrayList<MessageModel> messageList, Context ctx, int type) {
        this.messageList = messageList;
        this.ctx = ctx;
        this.type = type;
    }


    @NonNull
    @Override
    public SenderHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.mc_list_item, viewGroup, false);
        return new SenderHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull final SenderHolder holder, final int position) {
        final MessageModel message = messageList.get(position);




 }



    void removeItem(int position) {
        setPosition(position);
        messageList.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, messageList.size());
    }


    public Integer getPosition() {
        return position;
    }

    public void setPosition(Integer position) {
        this.position = position;
    }



    void restoreItem(MessageModel item) {
        messageList.add(getPosition(), item);
        notifyItemInserted(getPosition());
    }

    ArrayList<MessageModel> getMessageList() {
        return messageList;
    }

    private Date yesterday() {
        final Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        return cal.getTime();
    }

    @Override
    public void onBindViewHolder(@NonNull SenderHolder holder, int position, @NonNull List<Object> payloads) {
        super.onBindViewHolder(holder, position, payloads);
    }

    private String getCurrentDate() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat mdformat = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());
        return mdformat.format(calendar.getTime());
    }

    @Override
    public int getItemCount() {
        return messageList.size();
    }

    class SenderHolder extends RecyclerView.ViewHolder {

        final TextView tvFrom, tvSubject, tvDate, tvBody;
        final ImageView attachIV, indicactor;
        RelativeLayout relativeLayout;

        SenderHolder(View itemView) {
            super(itemView);
            tvFrom = itemView.findViewById(R.id.tv_from);
            tvSubject = itemView.findViewById(R.id.tv_subject);
            tvDate = itemView.findViewById(R.id.tv_date);
            tvBody = itemView.findViewById(R.id.letter_text);
            attachIV = itemView.findViewById(R.id.clip);
            indicactor = itemView.findViewById(R.id.indicator);
            relativeLayout = itemView.findViewById(R.id.message_list_item);
        }
    }
}

может кто знает как решить мою проблему? Спасибо за вашу помощь :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...