目标

群聊已经创建。我想在RecyclerView上提示群聊的名称。

数据库树

java - Android-Firebase-提示群聊名称-LMLPHP

我有一个管理员帐户,可以为用户创建这些群聊。

在数据库中看到的Android,亚洲和欧洲群聊不是固定变量。他们是名字。新的群聊名称可以是“ Earth”。

因此,除了由Node本身调用之外,没有其他方法可以通过变量调用它。

问题

我无法提示管理员创建的任何群聊“名称”。意思是,我无法提示“ Android”,“亚洲”和“欧洲”或在“群组聊天”节点中创建和存储的任何群组聊天

活动流程

AdminActivity --- {创建群组Chat.func}

用户-视图-> GroupFragment {已提示GroupChats}

AdminActivity.java-createGroupChat函数

public void createGroupChat(){
    Map<String, Object> groupChatMap = new HashMap<String, Object>();
    groupChatMap.put(jAdminGroupChatName.getText().toString(),"");
    groupChatRoot.updateChildren(groupChatMap);
    Toast.makeText(AdminActivity.this, "Group Chat Created", Toast.LENGTH_SHORT).show();
    jAdminGroupChatName.setText("");
}


小组讨论班

// GET GROUP CHAT NAME

public class GroupChats {
    public String name;

    public GroupChats() {
    }

    public GroupChats(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


GroupFragment.java

    @Override
    public void onStart() {
        super.onStart();

        FirebaseRecyclerAdapter<GroupChats, GroupChatViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<GroupChats, GroupChatViewHolder>(
                GroupChats.class,
                R.layout.layout_groups,
                GroupChatViewHolder.class,
                jGroupsDatabase
        ){
            @Override
            protected void populateViewHolder(GroupChatViewHolder viewHolder, GroupChats model, int position) {
                viewHolder.setName(model.getName());

                final String viewGroupID = getRef(position).getKey();

                viewHolder.jGroupChatView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intentGroupChat =  new Intent(getActivity(), ChatFragment.class);
                        intentGroupChat.putExtra("viewGroupID", viewGroupID);
                        startActivity(intentGroupChat);
                    }
                });

            }
        };

        jGroupChatList.setAdapter(firebaseRecyclerAdapter);

    }

    public static class GroupChatViewHolder extends RecyclerView.ViewHolder{

        View jGroupChatView;

        public GroupChatViewHolder(View itemView) {
            super(itemView);
            jGroupChatView = itemView;
        }

        public void setName(String groupName){
            TextView jAllGroupChatName = jGroupChatView.findViewById(R.id.groupChatNameTxt);
            jAllGroupChatName.setText(groupName);
        }

    }
}


附加评论


在线教程


我已经在youtube上观看了Android Firebase群聊教程。链接为https://www.youtube.com/watch?v=wVCz1a3ogqk。在该视频中,开发人员以提示在同一类MainActivity.java中的群聊名称的方式编写了代码。

教程流程:

MainActivity ---- {创建组Chat.func} ---- {Group Chat Prompt.func}


任务要求


我的任务要求使我有必要从AdminActivity创建它,并仅在用户视图中提示群聊名称。

任务流程:

AdminActivity --- {创建群聊功能}

用户-视图-> GroupFragment {已提示GroupChats}

未来的实现-未来的问题

如果我能够在Stackoverflow用户的帮助下解决此问题,我将来的实现是允许用户单击“群聊”名称,然后将其带入群聊本身,从而允许通过电子邮件身份验证( Firebase)用户与该群聊中的其他人聊天。当然,如果我无法为此编写代码,我将在另一个问题中寻求解决方案。

最佳答案

如果“群聊”的格式如下,您的代码将起作用:

java - Android-Firebase-提示群聊名称-LMLPHP

为此,您应该更新createGroup()函数:

public void createGroupChat(){
    String newGroupName = jAdminGroupChatName.getText().toString();
    GroupChats newGroupChat = new GroupChats(newGroupName);
    String newGroupKey = groupChatRoot.push().getKey();
    groupChatRoot.child(newGroupKey).setValue(newGroupChat);
    Toast.makeText(AdminActivity.this, "Group Chat Created - Key: " + newGroupKey, Toast.LENGTH_SHORT).show();
    jAdminGroupChatName.setText("");
}




但是,如果要保留当前格式,则无需使用FirebaseRecyclerAdapter。您可以在addValueEventListener()上调用groupChatRoot并遍历结果,将密钥保存到列表中,然后在recyclerview中显示它们,如下所示:

groupRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        ArrayList<String> groupChatNames = new ArrayList<>();
        for (DataSnapshot child : dataSnapshot.getChildren()) {
            groupChatNames.add(child.getKey());
        }
        Adapter adapter = new Adapter(groupChatNames);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});


其中Adapter类如下:

public class Adapter extends RecyclerView.Adapter<Adapter.MyHolder> {

    ArrayList<String> list;

    public Adapter(ArrayList<String> list) {
        this.list = list;
    }


    @Override
    public Adapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_groups, parent, false);
        MyHolder holder = new MyHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        holder.setText(list.get(position));
    }

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

    class MyHolder extends RecyclerView.ViewHolder {
        TextView nameTextView;

        public MyHolder(View itemView) {
            super(itemView);
            nameTextView = (TextView) itemView.findViewById(R.id.groupChatNameTxt);
        }

        public void setText(String groupName) {
            nameTextView.setText(groupName);
        }
    }
}

10-08 18:27