如何在Android Firebase聊天中显示打字指示符

时间:2019-02-15 04:41:36

标签: android firebase firebase-realtime-database android-edittext

我需要使用Firebase在聊天应用程序中实现打字指示器。 我有类似的逻辑

  • 添加textwatcher侦听器,并在文本更改侦听器中更新名为firebase db中键入的字段的标记
  • 然后我认为当值更改时它将通知值更改侦听器

    如果任何人有代码实现,请分享。

enter image description here

2 个答案:

答案 0 :(得分: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 :(得分:1)

是的。你答对了。在用户节点中,维护一个布尔值标志,例如isTyping

textwatcherListener

将该值更改为true,并且onValueChangeListner也会触发,因此您可以通过获取布尔值来在收件人屏幕上设置Typing