2016-10-07 2 views
0

Я хочу создать chatapp. Но в recyclerview я могу получать сообщения только из usermsg databasereference. Я не знаю, как я должен это кодировать, что я показываю 2 recyclerviews. У кого-то есть идея? БлагодаряНесколько Recyclerview

Чат Активность

package highelo.drivetogether; 

import android.app.Activity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.provider.ContactsContract; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.firebase.ui.database.FirebaseRecyclerAdapter; 
import com.google.firebase.database.ChildEventListener; 
import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 
import com.squareup.picasso.Picasso; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

public class Chat extends AppCompatActivity { 

    RecyclerView mFriendMsg; 
    RecyclerView mUserMsg; 
    private Button SendMsg; 
    private EditText EditMsg; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_chat); 

     final Intent s = getIntent(); 
     final String userID = s.getStringExtra("UID"); 

     final Intent i = getIntent(); 
     final String post_UserID = i.getStringExtra("FID"); 

     SendMsg = (Button) findViewById(R.id.send_msg); 
     EditMsg = (EditText) findViewById(R.id.edit_msg); 

     mUserMsg = (RecyclerView) findViewById(R.id.chat_conr); 
     mUserMsg.setHasFixedSize(true); 
     mUserMsg.setLayoutManager(new LinearLayoutManager(this)); 

     mFriendMsg = (RecyclerView) findViewById(R.id.chat_conr); 
     mFriendMsg.setHasFixedSize(true); 
     mFriendMsg.setLayoutManager(new LinearLayoutManager(this)); 
    } 

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

     final Intent s = getIntent(); 
     final String userID = s.getStringExtra("UID"); 

     final Intent i = getIntent(); 
     final String post_UserID = i.getStringExtra("FID"); 

     DatabaseReference FriendMsg = FirebaseDatabase.getInstance().getReference().child("Users").child(userID).child("Chats").child(post_UserID).child("Chat"); 
     DatabaseReference UserMsg = FirebaseDatabase.getInstance().getReference().child("Users").child(post_UserID).child("Chats").child(userID).child("Chat"); 

     final FirebaseRecyclerAdapter<Blog, BlogViewHolder2> firebaseRecyclerAdapter2 = new FirebaseRecyclerAdapter<Blog, BlogViewHolder2>(
       Blog.class, 
       R.layout.inchat_row2, 
       BlogViewHolder2.class, 
       UserMsg) { 
      @Override 
      protected void populateViewHolder(BlogViewHolder2 viewHolder, Blog model, int position) { 
       viewHolder.setNachricht(model.getNachricht()); 
       viewHolder.setImage(Chat.this, model.getFImage()); 
      } 
     }; 
     mUserMsg.setAdapter(firebaseRecyclerAdapter2); 

     final FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
       Blog.class, 
       R.layout.inchat_row, 
       BlogViewHolder.class, 
       FriendMsg) { 

      @Override 
      public void populateViewHolder(final BlogViewHolder viewHolder, Blog model, int position) { 
       viewHolder.setNachricht(model.getNachricht()); 
       viewHolder.setImage(Chat.this, model.getFImage()); 
      } 
     }; 
     mFriendMsg.setAdapter(firebaseRecyclerAdapter); 
    } 

    public static class BlogViewHolder2 extends RecyclerView.ViewHolder{ 
     View mView; 
     public BlogViewHolder2(View itemView) { 
      super(itemView); 
      mView = itemView; 
     } 
     public void setNachricht(String Nachricht){ 
      TextView post_Nachricht = (TextView)mView.findViewById(R.id.finchat_mess); 
      post_Nachricht.setText(Nachricht); 
     } 
     public void setImage(Context ctx, String FImage){ 
      ImageView post_image = (ImageView)mView.findViewById(R.id.finchat_image); 
      Picasso.with(ctx).load(FImage).fit().centerCrop().into(post_image); 
     } 
    } 

    public static class BlogViewHolder extends RecyclerView.ViewHolder{ 
     View mView; 
     public BlogViewHolder(View itemView) { 
      super(itemView); 
      mView = itemView; 
     } 
     public void setNachricht(String Nachricht){ 
      TextView post_Nachricht = (TextView)mView.findViewById(R.id.uinchat_mess); 
      post_Nachricht.setText(Nachricht); 
     } 
     public void setImage(Context ctx, String FImage){ 
      ImageView post_image = (ImageView)mView.findViewById(R.id.uinchat_image); 
      Picasso.with(ctx).load(FImage).fit().centerCrop().into(post_image); 
     } 
    } 
} 

chat_activity

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="1"> 


    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="492dp" 
     android:id="@+id/chat_conr" 
     android:layout_weight="1.11" 
     android:layout_alignParentTop="true" 
     android:layout_alignRight="@+id/send_msg" 
     android:layout_alignEnd="@+id/send_msg" 
     android:layout_above="@+id/edit_msg" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/edit_msg" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_toStartOf="@+id/send_msg" 
     android:layout_toLeftOf="@+id/send_msg" /> 

    <Button 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:text="Senden" 
     android:id="@+id/send_msg" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

Inchat_row

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_margin="1dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <de.hdodenhof.circleimageview.CircleImageView 
      android:layout_width="54dp" 
      android:layout_height="54dp" 
      android:id="@+id/uinchat_image" 
      app:civ_border_width="1dp" 
      app:civ_border_color="#ff0000"/> 


     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/uinchat_mess" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:paddingLeft="5dp" 
      android:textSize="13dp" 
      android:paddingBottom="4dp" 
      android:singleLine="true" 
      android:layout_alignParentTop="true" 
      android:layout_toEndOf="@+id/uinchat_image" 
      android:layout_alignBottom="@+id/uinchat_image" /> 


    </RelativeLayout> 

</android.support.v7.widget.CardView> 

Inchat2_row

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_margin="1dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <de.hdodenhof.circleimageview.CircleImageView 
      android:layout_width="54dp" 
      android:layout_height="54dp" 
      android:id="@+id/finchat_image" 
      app:civ_border_width="1dp" 
      app:civ_border_color="#ff0000" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 


     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/finchat_mess" 
      android:layout_alignParentEnd="false" 
      android:paddingLeft="5dp" 
      android:textSize="13dp" 
      android:paddingBottom="4dp" 
      android:singleLine="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:layout_toLeftOf="@+id/finchat_image" 
      android:layout_alignBottom="@+id/finchat_image" /> 


    </RelativeLayout> 

</android.support.v7.widget.CardView> 

ответ

0

Обычный способ иметь беседу между двумя людьми, чтобы смоделировать этот чат в базе данных:

ChatRooms 
    ChatRoomBetweenUser1AndUser2 
    -KLM.......24 
     name: "User One" 
     uid: "uidOfUser1" 
     text: "Hello there. This is your friend User One" 
    -KMN.......35 
     name: "User Two" 
     uid: "uidOfUser2" 
     text: "Hello User One, this is User Two. Over" 

Таким образом, вам нужно только загрузить данные из одного места и нужен только один RecyclerView.

Для получения дополнительной информации о том, как эффективно моделировать имена чатов для этого сценария, см. Best way to manage Chat channels in Firebase.

Чтобы начать работу над созданием чат-приложения, выполните Firebase Codelab for Android.

Для хорошего внедрения в моделирование данных, как это нужно вашему приложению, см. Эту статью на странице NoSQL data modeling.

+0

Спасибо, что это лучшая идея! –

Смежные вопросы