Предотвратить фрагмент от прыжка на вершину Recyclerview - PullRequest
0 голосов
/ 22 апреля 2020

Я создаю приложение чата в Android с использованием Firebase, и я столкнулся с досадной проблемой, которую не знаю, как ее исправить. Каждый раз, когда я нажимаю кнопку отправки, чтобы отправить сообщение Recyclerview, которое находится в моем фрагменте, «прыгает» наверх, вместо того, чтобы оставаться фиксированным при последнем отправленном сообщении. Я предполагаю, что это связано с настройкой адаптера после вызова моего ValueEventListener, но я не уверен, как этого избежать. Есть предложения?

public class ChatFragment extends Fragment {

    private static final String TAG = "ChatFragment";

    private DatabaseReference databaseReference;
    private FragmentChatBinding binding;
    private ArrayList<Message> messageArrayList = new ArrayList<>();
    private MessageAdapter adapter;
    private RecyclerView recyclerView;

    public ChatFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // inflate layout
        binding = FragmentChatBinding.inflate(inflater, container, false);

        // store root view
        View view = binding.getRoot();

        recyclerView = view.findViewById(R.id.recyclerview_message_list);

        // get instance of firebase database node "message"
        databaseReference = FirebaseDatabase.getInstance().getReference("message");

        binding.buttonChatboxSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendMessageToDb();
            }
        });

        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        binding.recyclerviewMessageList.setLayoutManager(layoutManager);

        setChatListener();

        // return root view
        return view;
    }


    /*
    Sets listener for chat fragment
     */
    private void setChatListener() {
        ValueEventListener listener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                messageArrayList.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Message message = snapshot.getValue(Message.class);
                    messageArrayList.add(message);
                }
                adapter = new MessageAdapter(messageArrayList);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };
        databaseReference.addValueEventListener(listener);
    }

1 Ответ

1 голос
/ 22 апреля 2020

Настройте ваш LinearLayoutManager на следующее:

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