質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

受付中

FirestoreのデータをRecycleViewに表示させたい

masato01
masato01

総合スコア10

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0回答

-1評価

0クリップ

266閲覧

投稿2022/03/02 05:00

編集2022/03/07 13:35

今やっていること

Kotlinで掲示板アプリを作っています。

Firestoreから、Recycleviewにデータを読み取って画面に表示させたいと思っています。
いろいろなサイトを参考にしながら進めてきましたが、分からないところがでてきました。

Firestoreから読み取りたいものは
・名前
・投稿した時間
・タイトル
・詳細
・(アイコン)←まだFirestorageに保存していない

質問したいこと

たくさんあってすみません。

・データクラスは必要か
・データクラスの、投稿時間「var createAt: Date = Date(System.currentTimeMillis()),」はあっているのか。また、必要か。
・CustomAdapterクラスをどこで継承するのか
・他にも意味のないコードがあったり、必要なコードがあったら教えていただきたいです。

コード

1行分のレイアウト

item_post.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp" android:clickable="true" android:focusable="true" android:padding="12dp"> <de.hdodenhof.circleimageview.CircleImageView android:id="@+id/icon" android:layout_width="60dp" android:layout_height="60dp" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_weight="1" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/tvname" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="20sp" android:textStyle="bold" android:layout_margin="5dp"/> <TextView android:id="@+id/tvtime" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="20sp" android:layout_margin="5dp"/> </LinearLayout> <TextView android:id="@+id/tvtitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dp" android:textColor="#000000" android:textSize="34sp" android:textStyle="bold"/> <TextView android:id="@+id/tvpost" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#000000" android:textSize="25sp" /> </LinearLayout> </LinearLayout>

データクラス

Post.kt

package com.example.a.Post import java.sql.Date data class Post( val icon: Int, val title: String, val detail: String, var createAt: Date = Date(System.currentTimeMillis()), )

アダプター

CustomAdapter.kt

package com.example.a.Post import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.example.a.R class CustomAdapter(private val postlist: ArrayList<Post>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() { class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { val icon: ImageView val title: TextView val post: TextView init { icon = view.findViewById(R.id.icon) title = view.findViewById(R.id.tvtitle) post = view.findViewById(R.id.tvpost) } } //レイアウトの設定 override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.item_post, viewGroup, false) return ViewHolder(view) } //Viewの設定 override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) { val post = postlist[position] viewHolder.icon.setImageResource(post.icon) viewHolder.title.text = post.title viewHolder.post.text = post.detail } //表示数を返す override fun getItemCount(): Int = postlist.size }

表示させるフラグメント

HomeFragment.kt

package com.example.a.Home import android.content.ContentValues.TAG import android.content.Intent import androidx.lifecycle.ViewModelProvider import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.example.a.Post.CustomAdapter import com.example.a.Post.PostScreenActivity import com.example.a.databinding.HomeFragmentBinding import com.google.firebase.auth.ktx.auth import com.google.firebase.firestore.CollectionReference import com.google.firebase.firestore.Query import com.google.firebase.firestore.ktx.firestore import com.google.firebase.ktx.Firebase class HomeFragment : Fragment() { companion object { fun newInstance() = HomeFragment() } private lateinit var viewModel: HomeViewModel private var _binding: HomeFragmentBinding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = HomeFragmentBinding.inflate(inflater, container, false) val view = binding.root return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.btnpostsc.setOnClickListener { startActivity( Intent( context, PostScreenActivity::class.java ) ) } val db = Firebase.firestore val user = Firebase.auth.currentUser val uid = user!!.uid val citiesRef = db.collection("users").document(uid).collection("UserPosts") citiesRef.orderBy("createdDay", Query.Direction.DESCENDING) citiesRef.get() .addOnSuccessListener { Log.d(TAG, "読み取り成功") } .addOnFailureListener { Log.d(TAG, "読み取り失敗") } } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProvider(this).get(HomeViewModel::class.java) // TODO: Use the ViewModel } override fun onDestroyView() { super.onDestroyView() _binding = null } }

参考にしたサイト

RecyclerViewでグリッド表示を実装する方法を解説
https://hirauchi-genta.com/kotlin-view-recycerview-grid/

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2022/03/02 10:02 編集

Firebase に関係無く、 RecyclerView の使い方が分からないということでしょうか。 それから、ご質問は編集できます。 過去の同じ質問は運営に削除依頼をしてください。
masato01

2022/03/02 11:46

編集できるのをすっかり忘れていました。。 削除申請したのですが、当然すぐ削除されるわけがなく、慌てて解決済みにして新しく質問してしまいました。 Firebase に関係無く、 RecyclerView の使い方が分からないということでしょうか。 >RecycleViewの簡単な使い方しか分かりません。
jimbe

2022/03/03 03:27

> 編集できるのをすっかり忘れていました。 それは仕方ないですね^^;;; ResyclerView の使い方の基本としてましてビューにアダプタを設定しなければならないはずですが、 HogeFragment にはそのような部分が見当たりません。 その辺りはどのようにお考えでしょうか。
masato01

2022/03/03 06:23

CustomAdapterクラスですよね。 どこに、どのように継承したらいいのか分からないです。 先程、「参考にしたサイト」という見出しと、参考にしたURLを追加で貼りました。 そちらのサイトを参考にしたのですが分かりませんでした。 このサイトでは、animalListという変数に、リスト内容を代入しているのですが、こちらでも代入をするべきなのでしょうか。また、どのように代入したらいいのでしょうか。
jimbe

2022/03/03 07:25 編集

参考にされたリンク先のコードの animalList への代入個所がご質問のコードでの Firebase のデータベースからの読み込みになると思うのですが、すいません、私は Firebase を使ったことがありませんのでどのように Firestore から animalList のような List オブジェクトを取り出す/作るのかは分かりません。 RecyclerView へのアダプタの設定は、リンク先の MainActivity.kt の(animalAdapter への代入の後の) 15 行目 recycler_view.adapter = CustomAdapter(animalList) で行われていますので、 HomeFragment.kt でもデータベースから読み取って CustomAdapter にデータを設定した後に同様の処理を行うこととなると思います。 「CustomAdapterクラスを継承」と言われていますが、恐らく勘違いされています。 RecyclerView に使うアダプタは RecyclerView.Adapter を継承している必要がありますが、 CustomAdapter は既にその状態ですので、さらに何かを(継承して)作る必要は無いと思います。 必要なのは RecyclerView に Adapter を設定することであり、その Adapter とは(この件では) CustomAdapter のことで、 CustomAdapter はデータ元として ArrayList<Post> を必要とし、その ArrayList<Post> は CustomAdapter のコンストラクタで渡す必要があります。 ですので、 Firestore からどのように ArrayList<Post> を作り出すかが焦点となりますが、先述しましたように私にはこの部分は分かりません。 探したところでは、以下のような感じでしょうか。 [コレクションから複数のドキュメントを取得する] https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja#get_multiple_documents_from_a_collection
masato01

2022/03/07 04:35

返信遅くなり申し訳ありません。 [コレクションから複数のドキュメントを取得する] についてなのですが、 HomeFragmentで同じようなことをやっていますが、それとは別でということでしょうか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。