ButAndroid - Firebase - Envoyer utilisateurs de Chat Room
Permettre aux utilisateurs d'accéder à leur groupe sélectionné chat. Une fois que l'utilisateur a cliqué sur le nom de la conversation de groupe, il sera entré dans ce groupe de conversation.
Database Arbre
Comme le montre la base de données Arbre, l'enregisté utilisateur sera affiché une liste de noms de conversation de groupe qui ont été créés.
J'ai un compte administrateur pour créer ces groupes de discussion pour les utilisateurs.
Les conversations de groupe Android, Asie et Europe qui sont visibles dans la base de données NE SONT PAS des variables fixes. Ce sont des noms. Un nouveau nom de conversation de groupe pourrait être "Terre".
Par conséquent, il n'y a aucun moyen de l'appeler par une variable autre que l'appeler par le nœud lui-même.
Capture d'écran d'application
- Liste du groupe 2. Causeries Saisie d'un groupe de conversation
flux des activités
GroupFragment ---> Causerie Activité
GroupFragment < --- Activité pour chatter
flux d'application
Utilisateur ---> LoginActivity ---> UserActivity ---> GroupFrag ---> GroupChatActivity
Au (GroupFrag ---> GroupChatActivity) L'utilisateur doit sélectionner un Group Chat na moi dans le GroupFrag pour entrer dans le GroupChatActivity
L'utilisateur doit sélectionner un nom de groupe chat dans le GroupFrag pour entrer dans le GroupChatActivity
Description de
- Les utilisateurs seront en mesure de sélectionner un groupe de conversation name (à partir de GroupFragment) et l'application va amener l'utilisateur dans le groupe de discussion lui-même (dans l'activité de chat). L'utilisateur pourra revenir à GroupFragment et sélectionner un autre groupe désiré.
(noms de conversation de groupe sont pas figées - Ils ne sont pas un nœud qui peut être appelé à partir)
Problème
- Je ne peux pas sélectionner le groupe de conversation noms après qu'il a été rapide dans le Fragment, ce qui m'amènera alors à la conversation de groupe.
Groupe Fragment
@Override
public void onStart() {
super.onStart();
class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.MyHolder> {
ArrayList<String> list;
public GroupAdapter(ArrayList<String> list) {
this.list = list;
}
@Override
public GroupAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_groups, parent, false);
return new MyHolder(view);
}
@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 = itemView.findViewById(R.id.groupChatNameTxt);
}
public void setText(String groupName) {
nameTextView.setText(groupName);
}
}
}
jGroupsDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> groupChatNames = new ArrayList<>();
for (DataSnapshot child : dataSnapshot.getChildren()) {
groupChatNames.add(child.getKey());
}
GroupAdapter adapter = new GroupAdapter(groupChatNames);
jGroupChatList.setAdapter(adapter);
//I'm not sure where to write a code for userID
//final String usersID = getRef(position).getKey();
// When the user clicks on one of the group chat names, he/she will be sent to the Chat Activity
jGroupChatList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intentUserProfile = new Intent(getActivity(), ChatActivity.class);
intentUserProfile.putExtra("groupChatName",groupName);
intentUserProfile.putExtra("neighbourhood", neighbourhood);
intentUserProfile.putExtra("usersName", usersName);
intentUserProfile.putExtra("usersID", usersID);
startActivity(intentUserProfile);
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Activité Chat
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
jGroupChatName = getIntent().getExtras().get("groupChatName").toString();
jUserID = getIntent().getExtras().get("usersID").toString();
jUserName = getIntent().getExtras().get("usersName").toString();
jUserNeighbourhood = getIntent().getExtras().get("neighbourhood").toString();
jChatRoot = FirebaseDatabase.getInstance().getReference().child(jGroupChatName);
jChatToolbar = (Toolbar) findViewById(R.id.allUSersToolBar);
setSupportActionBar(jChatToolbar);
getSupportActionBar().setTitle(jGroupChatName); // Show the name of the selected group name
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Commentaires supplémentaires
- Didacticiel en ligne
J'ai regardé un didacticiel de conversation de groupe Android Firebase sur youtube. Le lien est https://www.youtube.com/watch?v=wVCz1a3ogqk. Mais il ne fournit pas les fonctionnalités/fonctions que je suis en train d'implémenter.
- Lié Question
Android - Firebase - Prompting Group Chat Names
Future Implémentations
Pour les implémentations futures, je voudrais envoyer et récupérer les messages et invite dans le chat de groupe pour les utilisateurs pour voir comme un vrai chat de groupe. Mais bien sûr, je vais laisser cela pour une autre question.
Vos 'groups' sont statiques ou dynamiques –
Mes noms de groupe sont dynamiques. Si je devais ajouter à une discussion de groupe appelée "Terre", il y aura alors une discussion de groupe appelée "Terre". Les noms ne sont pas ** fixes **. Dois-je ajouter le code entier pour le cours? En ce moment j'ai seulement ajouté dans les importants. Ce qui signifie que j'ai exclu les importations, les fichiers privés, etc. Les codes que j'ai publiés ne sont que les fonctions. Et merci d'avoir répondu à cette question = D – Student
Juste pour clarifier - vous avez un listView qui correspond au noeud Group Chat? Dans l'exemple, listView a 3 valeurs? Et vous voulez dire quand un utilisateur clique sur la liste puis son nom d'utilisateur (une variable) est ajouté au noeud de conversation de groupe? – Torewin