- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
瞄准
群聊已创建。我想在 RecyclerView 上提示群聊的名称。
数据库树
我有一个管理员帐户来为用户创建这些群聊。
数据库中显示的 Android、亚洲和欧洲群聊不是固定变量。它们是名字。新的群聊名称可能是“地球”。
因此,除了由节点本身调用之外,没有其他方法可以通过变量来调用它。
问题
我无法提示管理员创建的任何群聊“名称”。这意味着,我无法提示出“Android”、“亚洲”和“欧洲”或在群聊节点中创建和存储的任何群聊
Activity 流程
AdminActivity---{创建群聊.func}
用户---- View ---->GroupFragment{提示群聊}
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----{创建群聊.func}----{群聊提示.func}
我的任务要求使我有必要从 AdminActivity 创建它,并仅为用户 View 提示群聊名称。
任务流程:
AdminActivity---{创建群聊.function}
用户---- View ---->GroupFragment{提示群聊}
future 的实现 - future 的问题
如果我能够在 Stackoverflow 用户的帮助下解决这个问题,我 future 的实现是允许用户单击“群聊”名称,然后将他们带入群聊本身,从而允许向经过身份验证的 (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
。您可以在 groupChatRoot
上调用 addValueEventListener()
并迭代结果,将键保存到列表中,然后在 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);
}
}
}
关于java - Android - Firebase - 提示群聊名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46412882/
我是一名优秀的程序员,十分优秀!