目标
群聊已经创建。我想在RecyclerView上提示群聊的名称。
数据库树
我有一个管理员帐户,可以为用户创建这些群聊。
在数据库中看到的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)用户与该群聊中的其他人聊天。当然,如果我无法为此编写代码,我将在另一个问题中寻求解决方案。
最佳答案
如果“群聊”的格式如下,您的代码将起作用:
为此,您应该更新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);
}
}
}