Android - Firebase - Send Users to Chat Room

后端 未结 3 781
余生分开走
余生分开走 2020-12-12 07:27

Aim

Allowing the Users to access their selected Group Chat. Once the user clicks on the Group Chat name, they will be entered into that Group Chat.<

3条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-12 07:46

    You can update your adapter and viewholder implementation as follows:

    public class Adapter extends RecyclerView.Adapter {
    
        Context context;
        ArrayList list;
    
        public Adapter(Context context, ArrayList list) {
            this.context = context;
            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;
            View.OnClickListener onClickListener = new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String groupName = list.get(getAdapterPosition());
                    Intent intentUserProfile = new Intent(context, MainActivity.class);
                    intentUserProfile.putExtra("groupChatName", groupName);
                    // If fixed, you should pass these values to adapter's constructor
                    // intentUserProfile.putExtra("neighbourhood", neighbourhood);
                    // intentUserProfile.putExtra("usersName", usersName);
                    // intentUserProfile.putExtra("usersID", usersID);
                    context.startActivity(intentUserProfile);
                }
            };
    
            public MyHolder(View itemView) {
                super(itemView);
                itemView.setOnClickListener(onClickListener);
                nameTextView = (TextView) itemView.findViewById(R.id.groupChatNameTxt);
            }
    
            public void setText(String groupName) {
                nameTextView.setText(groupName);
            }
        }
    }
    

    You also have to update this line in your GroupFragment:

    GroupAdapter adapter = new GroupAdapter(getActivity(), groupChatNames);
    

    This is another solution that you can implement inside your fragment so that you can put extras in intent (actually modified from your former question):

    @Override
    public void onStart() {
        super.onStart();
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference groupChatsRef = rootRef.child("Group Chats");
        FirebaseRecyclerAdapter chatAdapter = new FirebaseRecyclerAdapter(
                String.class,
                R.layout.layout_groups,
                GroupChatViewHolder.class,
                groupChatsRef) {
            protected void populateViewHolder(GroupChatViewHolder viewHolder, String model, int position) {
                final String groupChatName = this.getRef(position).getKey();
                viewHolder.setName(groupChatName);
                viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intentUserProfile = new Intent(getActivity(), ChatActivity.class);
                        intentUserProfile.putExtra("groupChatName", groupChatName);
                        intentUserProfile.putExtra("neighbourhood", neighbourhood);
                        intentUserProfile.putExtra("usersName", usersName);
                        intentUserProfile.putExtra("usersID", usersID);
                        startActivity(intentUserProfile);
                    }
                });
            }
        };
        jGroupChatList.setAdapter(chatAdapter);
    }
    

    Note that it handles your string-string group chat entries in your DB as key-value pairs.

提交回复
热议问题