2016-10-07 6 views
0

Ich möchte eine Chatapp erstellen. Aber in der Recycleransicht kann ich nur die Nachrichten von der usermsg-Datenbankreferenz empfangen. Ich weiß nicht, wie ich es codieren sollte, dass ich 2 Recyclerviews zeige. Hat jemand eine Idee? DankMehrere Recyclerview

Chat Aktivität

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> 

Antwort

0

Der üblicher Weg, einen Chat zwischen zwei Menschen haben, ist, dass die Chat-Raum in Ihrer Datenbank zu modellieren:

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" 

Auf diese Weise brauchen Sie nur Daten von einem Ort zu laden und brauchen nur eine RecyclerView. Weitere Informationen zum effizienten Modellieren von Chat-Room-Namen für dieses Szenario finden Sie unter Best way to manage Chat channels in Firebase.

Um einen guten Start zum Erstellen einer Chat-App zu bekommen, folgen Sie der Firebase Codelab for Android.

Für eine gute Einführung in die Modellierung Ihrer Daten, wie es Ihre App benötigt, lesen Sie diesen Artikel unter NoSQL data modeling.

+0

Vielen Dank das ist eine bessere Idee! –

Verwandte Themen