首页 > 解决方案 > FirebaseRecyclerAdapter 没有滚动到底部

问题描述

我正在使用 FirebaseRecyclerAdapter 在 recyclerView 中显示消息的聊天活动,我的问题是在发送或接收消息时滚动到底部,有时它滚动到底部但大部分时间我必须手动滚动

我想我没有做出指示:recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());

在正确的位置

你能给我一个解决方案吗?!

这是我的适配器:

@Override
protected void onStart() {
    super.onStart();
    try {
        recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());
    }catch (NullPointerException e){}
    FirebaseRecyclerAdapter<Message,MessageViewHolder> FBRA1 = new FirebaseRecyclerAdapter<Message, MessageViewHolder>(
            Message.class,
            R.layout.singlemessagelayout,
            MessageViewHolder.class,
            refbase1
    ) {
        @Override
        protected void populateViewHolder(MessageViewHolder viewHolder, Message model, int position) {
            try {
                LinearLayout lin = viewHolder.l ;
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) lin.getLayoutParams();
                layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
                layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
                if (model.getSender().username.equals(senderUsername)){
                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
                    lin.setBackground(getResources().getDrawable(R.drawable.rmimi));
                }else {
                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
                    lin.setBackground(getResources().getDrawable(R.drawable.mm));
                    }
                layoutParams.setMargins(10,10,10,10);
                viewHolder.setContent(model.date, model.message);
                recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());
            }catch (NullPointerException e){
            }

        }
    } ;
    recyclerView.setAdapter(FBRA1);
    recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());

}

这是我的 viewHolder 类:

public static class MessageViewHolder extends RecyclerView.ViewHolder {
    public View v ;
    public TextView t;
    public LinearLayout l ;
    public MessageViewHolder(View itemView) {
        super(itemView);
        v = itemView ;
        l = (LinearLayout)v.findViewById(R.id.mylayout) ;
        t = (TextView)v.findViewById(R.id.usernameid2) ;

    }

    public void setContent(String date, String content) {
        TextView messageContent = (TextView)v.findViewById(R.id.emailid2) ;
        TextView messagesender = (TextView)v.findViewById(R.id.usernameid2) ;
        messageContent.setText(content);
        messagesender.setText(date);

    }
}

标签: androidfirebase-realtime-databaseandroid-recyclerviewfirebaseui

解决方案


推荐阅读