今やっていること
Kotlinで掲示板アプリを作っています。
Firestoreから、Recycleviewにデータを読み取って画面に表示させたいと思っています。
いろいろなサイトを参考にしながら進めてきましたが、分からないところがでてきました。
Firestoreから読み取りたいものは
・名前
・投稿した時間
・タイトル
・詳細
・(アイコン)←まだFirestorageに保存していない
質問したいこと
たくさんあってすみません。
・データクラスは必要か
・データクラスの、投稿時間「var createAt: Date = Date(System.currentTimeMillis()),」はあっているのか。また、必要か。
・CustomAdapterクラスをどこで継承するのか
・他にも意味のないコードがあったり、必要なコードがあったら教えていただきたいです。
コード
1行分のレイアウト
item_post.xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="150dp" 5 android:clickable="true" 6 android:focusable="true" 7 android:padding="12dp"> 8 9 <de.hdodenhof.circleimageview.CircleImageView 10 android:id="@+id/icon" 11 android:layout_width="60dp" 12 android:layout_height="60dp" /> 13 14 <LinearLayout 15 android:layout_width="0dp" 16 android:layout_height="wrap_content" 17 android:layout_marginStart="16dp" 18 android:layout_weight="1" 19 android:orientation="vertical"> 20 21 <LinearLayout 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 android:orientation="horizontal"> 25 26 <TextView 27 android:id="@+id/tvname" 28 android:layout_width="0dp" 29 android:layout_height="wrap_content" 30 android:layout_weight="1" 31 android:textSize="20sp" 32 android:textStyle="bold" 33 android:layout_margin="5dp"/> 34 35 <TextView 36 android:id="@+id/tvtime" 37 android:layout_width="0dp" 38 android:layout_height="wrap_content" 39 android:layout_weight="1" 40 android:textSize="20sp" 41 android:layout_margin="5dp"/> 42 43 </LinearLayout> 44 45 <TextView 46 android:id="@+id/tvtitle" 47 android:layout_width="match_parent" 48 android:layout_height="wrap_content" 49 android:layout_marginBottom="4dp" 50 android:textColor="#000000" 51 android:textSize="34sp" 52 android:textStyle="bold"/> 53 54 <TextView 55 android:id="@+id/tvpost" 56 android:layout_width="match_parent" 57 android:layout_height="wrap_content" 58 android:textColor="#000000" 59 android:textSize="25sp" /> 60 61 </LinearLayout> 62</LinearLayout>
データクラス
Post.kt
1package com.example.a.Post 2 3import java.sql.Date 4 5data class Post( 6 val icon: Int, 7 val title: String, 8 val detail: String, 9 var createAt: Date = Date(System.currentTimeMillis()), 10)
アダプター
CustomAdapter.kt
1package com.example.a.Post 2 3import android.view.LayoutInflater 4import android.view.View 5import android.view.ViewGroup 6import android.widget.ImageView 7import android.widget.TextView 8import androidx.recyclerview.widget.RecyclerView 9import com.example.a.R 10import org.w3c.dom.Text 11 12class CustomAdapter(private val postlist: ArrayList<Post>) : 13 RecyclerView.Adapter<CustomAdapter.ViewHolder>() { 14 15 class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 16 17 val icon: ImageView 18 val title: TextView 19 val post: TextView 20 21 init { 22 icon = view.findViewById(R.id.icon) 23 title = view.findViewById(R.id.tvtitle) 24 post = view.findViewById(R.id.tvpost) 25 } 26 } 27 28 //レイアウトの設定 29 override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder { 30 val view = 31 LayoutInflater.from(viewGroup.context).inflate(R.layout.item_post, viewGroup, false) 32 return ViewHolder(view) 33 } 34 35 //Viewの設定 36 override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) { 37 val post = postlist[position] 38 39 viewHolder.icon.setImageResource(post.icon) 40 viewHolder.title.text = post.title 41 viewHolder.post.text = post.detail 42 } 43 44 //表示数を返す 45 override fun getItemCount(): Int = postlist.size 46}
表示させるフラグメント
HomeFragment.kt
1package com.example.a.Home 2 3import android.content.ContentValues.TAG 4import android.content.Intent 5import androidx.lifecycle.ViewModelProvider 6import android.os.Bundle 7import android.util.Log 8import androidx.fragment.app.Fragment 9import android.view.LayoutInflater 10import android.view.View 11import android.view.ViewGroup 12import com.example.a.Post.CustomAdapter 13import com.example.a.Post.PostScreenActivity 14import com.example.a.databinding.HomeFragmentBinding 15import com.google.firebase.auth.ktx.auth 16import com.google.firebase.firestore.CollectionReference 17import com.google.firebase.firestore.Query 18import com.google.firebase.firestore.ktx.firestore 19import com.google.firebase.ktx.Firebase 20 21class HomeFragment : Fragment() { 22 23 companion object { 24 fun newInstance() = HomeFragment() 25 } 26 27 private lateinit var viewModel: HomeViewModel 28 private var _binding: HomeFragmentBinding? = null 29 private val binding get() = _binding!! 30 31 override fun onCreateView( 32 inflater: LayoutInflater, container: ViewGroup?, 33 savedInstanceState: Bundle? 34 ): View? { 35 _binding = HomeFragmentBinding.inflate(inflater, container, false) 36 val view = binding.root 37 return view 38 } 39 40 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 41 super.onViewCreated(view, savedInstanceState) 42 binding.btnpostsc.setOnClickListener { 43 startActivity( 44 Intent( 45 context, 46 PostScreenActivity::class.java 47 ) 48 ) 49 } 50 51 val db = Firebase.firestore 52 val user = Firebase.auth.currentUser 53 val uid = user!!.uid 54 55 val citiesRef = db.collection("users").document(uid).collection("UserPosts") 56 citiesRef.orderBy("createdDay", Query.Direction.DESCENDING) 57 citiesRef.get() 58 .addOnSuccessListener { Log.d(TAG, "読み取り成功") } 59 .addOnFailureListener { Log.d(TAG, "読み取り失敗") } 60 } 61 62 63 override fun onActivityCreated(savedInstanceState: Bundle?) { 64 super.onActivityCreated(savedInstanceState) 65 viewModel = ViewModelProvider(this).get(HomeViewModel::class.java) 66 // TODO: Use the ViewModel 67 } 68 69 70 override fun onDestroyView() { 71 super.onDestroyView() 72 _binding = null 73 } 74 75}
前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。