如何在android firebase聊天中显示输入指示符[重复]

问题描述 投票:7回答:2

这个问题在这里已有答案:

我需要使用firebase在聊天应用程序中实现打字指示器。我有一个逻辑

  • 添加textwatcher侦听器,并在firebase db中名为键入的字段的文本更改侦听器更新标志中
  • 然后我认为当值更改时,它将通知值更改侦听器 如果任何人有代码实现请分享。

enter image description here

android firebase firebase-realtime-database android-edittext
2个回答
2
投票

请检查以下代码:`

使结构类似于:(根据您的需要可能会有所不同,我只是在向您推荐一些内容)

enter image description here

我有一个带有两个键的对象“isTyping”让我们说“first_user”和“second_user”。如果要检查“second_user”是否正在键入,则应该是代码。

  private void checkForOtherUserTypingStatus() {
        mMessageThread.child("isTyping").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("true")) {
                    updateTypingViewVisibility(true);
                } else if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("false")) {
                    updateTypingViewVisibility(false);
                }
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                if (dataSnapshot.getValue() != null) {
                    if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("true")) {
                        updateTypingViewVisibility(true);
                    } else if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("false")) {
                        updateTypingViewVisibility(false);
                    }
                }
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

更新“isTyping”>“first_user”的值(假设您正在键入)

 mBinder.etChatMessage.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {


                Map<String, Object> params = new HashMap<>();
                params.put("first_user", charSequence.length() > 0);
                mMessageThread.child("isTyping").updateChildren(params);
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

1
投票

是的你做对了。在用户节点中维护一个像isTyping这样的布尔标志。

textwatcherListener上将值更改为true,是的onValueChangeListner也将触发,以便您可以通过获取该布尔值在收件人屏幕上设置Typing

© www.soinside.com 2019 - 2024. All rights reserved.