前提・実現したいこと
androidアプリでUIの設定にFirebaseUIのFirestoreRecyclerAdapterを用いてチャットアプリを作っています。そこで下に示すサイトの内容をとりあえずコピーして動かそうとしています。コードやfirestore上のデータは下のサイトの内容と同じものを作ったのですが、layoutファイル(xmlファイル)をどのように設定すればよいかがわかりません。(RecyclerViewは先に配置するべきなのか、setContentViewではどのlayoutファイルを指定するのか等)そこで色々自分で調べてみたのですが、何がわかっていないのかわからない状況です。
質問:FireRececlerAdapterを使うときlayoutファイルはどのように設定すればよいのでしょうか?
ぜひ皆さんの知恵を貸していただきたいです。よろしくお願いします。
参考にしたサイト
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
Java
1package com.example.test; 2 3import androidx.appcompat.app.AppCompatActivity; 4 5import android.os.Bundle; 6import android.view.LayoutInflater; 7import android.view.View; 8import android.view.ViewGroup; 9 10import com.firebase.ui.firestore.FirestoreRecyclerAdapter; 11import com.firebase.ui.firestore.FirestoreRecyclerOptions; 12import com.google.firebase.firestore.FirebaseFirestore; 13import com.google.firebase.firestore.Query; 14 15public class MainActivity extends AppCompatActivity { 16 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 } 22 Query query = FirebaseFirestore.getInstance() 23 .collection("chats") 24 .orderBy("timestamp") 25 .limit(50); //最新の50個を取得 26 FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>() 27 .setQuery(query, Chat.class) 28 .build(); 29 FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<Chat, ChatHolder>(options) { 30 @Override 31 public void onBindViewHolder(ChatHolder holder, int position, Chat model) 32 { 33 // ChatHolderにChatクラスのオブジェクトを入れていきます 34 holder.setMessage(model.getMessage()); 35 holder.setName(model.getName()); 36 } 37 38 @Override 39 public ChatHolder onCreateViewHolder(ViewGroup group, int i) { 40 // ここではViewHolderのインスタンスを作成します 41 View view = LayoutInflater.from(group.getContext()) 42 .inflate(R.layout.activity_main, group, false); 43 44 return new ChatHolder(view); 45 } 46 }; 47 @Override 48 protected void onStart() { 49 super.onStart(); 50 adapter.startListening(); 51 } 52 53 @Override 54 protected void onStop() { 55 super.onStop(); 56 adapter.stopListening(); 57 } 58}
Java
1package com.example.test; 2 3import android.view.View; 4import android.widget.TextView; 5 6import androidx.recyclerview.widget.RecyclerView; 7 8 9public class ChatHolder extends RecyclerView.ViewHolder { 10 11 public TextView messsageText; 12 public TextView nameText; 13 14 public ChatHolder(View itemView) { 15 super(itemView); 16 messsageText = itemView.findViewById(R.id.message_text); 17 nameText = itemView.findViewById(R.id.name_text); 18 } 19 20 public void setMessage(String message){ 21 messsageText.setText(message); 22 } 23 24 public void setName(String name){ 25 nameText.setText(name); 26 } 27}
Java
1package com.example.test; 2 3import com.google.firebase.firestore.ServerTimestamp; 4import com.google.type.Date; 5 6public class Chat { 7 private String mName; 8 private String mMessage; 9 private String mUid; 10 private Date mTimestamp; 11 12 public Chat() { } // Needed for Firebase 13 14 public Chat(String name, String message, String uid) { 15 mName = name; 16 mMessage = message; 17 mUid = uid; 18 } 19 20 public String getName() { return mName; } 21 22 public void setName(String name) { mName = name; } 23 24 public String getMessage() { return mMessage; } 25 26 public void setMessage(String message) { mMessage = message; } 27 28 public String getUid() { return mUid; } 29 30 public void setUid(String uid) { mUid = uid; } 31 32 @ServerTimestamp 33 public Date getTimestamp() { return mTimestamp; } 34 35 public void setTimestamp(Date timestamp) { mTimestamp = timestamp; } 36}
補足情報(FW/ツールのバージョンなど)
android studio 4.1.1を用いています。
あなたの回答
tips
プレビュー