android - 数据未出现在 recyclerview 中
问题描述
我有 2 个片段,每个片段都有一个 Recyclerview 并使用相同的适配器。但是为什么数据只出现在 DashboardFragment 的 Recyclerview 中,而 TiketFragment 的 Recyclerview 却没有呢?
屏幕截图仪表板片段
截图 TiketFragment
TiketFragment.kt
class TiketFragment : Fragment() {
private lateinit var preferences: Preferences
private lateinit var mDatabase:DatabaseReference
private var dataList=ArrayList<Film>()
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_tiket, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
preferences= Preferences(activity!!.applicationContext)
mDatabase=FirebaseDatabase.getInstance().getReference("Film")
rc_ticket.layoutManager=LinearLayoutManager(context)
getData()
}
private fun getData() {
mDatabase.addValueEventListener(object :ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
dataList.clear()
for(getdataSnapshot in snapshot.children){
val film=getdataSnapshot.getValue(Film::class.java)
dataList.add(film!!)
}
rc_ticket.adapter=ComingSoonAdapter(dataList){
}
tv_total.setText("${dataList.size} Movies")
}
override fun onCancelled(error: DatabaseError) {
Toast.makeText(context, error.message, Toast.LENGTH_LONG).show()
}
})
}
}
仪表板片段.kt
class DashboardFragment : Fragment() {
private lateinit var preferences:Preferences
private lateinit var mDatabase:DatabaseReference
private var dataList=ArrayList<Film>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_dashboard , container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
preferences= Preferences(activity!!.applicationContext)
mDatabase=FirebaseDatabase.getInstance().getReference("Film")
tv_nama.setText(preferences.getValues("nama"))
if(preferences.getValues("saldo").equals("")){
currency(preferences.getValues("saldo")!!.toDouble(),tv_saldo)
}
Glide.with(this)
.load(preferences.getValues("url"))
.apply(RequestOptions.circleCropTransform())
.into(iv_profile)
rv_now_playing.layoutManager=LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false)
rv_coming_soon.layoutManager=LinearLayoutManager(context)
getData()
}
private fun getData() {
mDatabase.addValueEventListener(object :ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
dataList.clear()
for(getSnapshot in snapshot.children){
var film=getSnapshot.getValue(Film::class.java)
dataList.add(film!!)
}
rv_now_playing.adapter=NowPlayingAdapter(dataList){
var intent=Intent(context,DetailActivity::class.java).putExtra("data",it)
startActivity(intent)
}
rv_coming_soon.adapter=ComingSoonAdapter(dataList){
var intent=Intent(context,DetailActivity::class.java).putExtra("data",it)
startActivity(intent)
}
}
override fun onCancelled(error: DatabaseError) {
Toast.makeText(context,""+error.message,Toast.LENGTH_LONG).show()
}
})
}
private fun currency(harga:Double, textView: TextView){
val localID=Locale("in","ID")
val format= NumberFormat.getCurrencyInstance(localID)
textView.setText(format.format(harga))
}
}
ComingSoonAdapter.kt
class ComingSoonAdapter(private var data:List<Film>,
private val listener:(Film)-> Unit) : RecyclerView.Adapter<ComingSoonAdapter.ViewHolder>() {
lateinit var contextAdapter:Context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ComingSoonAdapter.ViewHolder {
val layoutInflater=LayoutInflater.from(parent.context)
contextAdapter=parent.context
val inflatedView=layoutInflater.inflate(R.layout.row_item_coming_soon,parent,false)
return ViewHolder(inflatedView)
}
override fun onBindViewHolder(holder: ComingSoonAdapter.ViewHolder, position: Int) {
holder.bindItem(data[position],listener,contextAdapter)
}
override fun getItemCount(): Int =data.size
class ViewHolder(view:View):RecyclerView.ViewHolder(view){
private val tvJudul:TextView=view.findViewById(R.id.tv_title)
private val tvRating:TextView=view.findViewById(R.id.tv_rate)
private val tvGenre:TextView=view.findViewById(R.id.tv_genre)
private val ivPoster:ImageView=view.findViewById(R.id.iv_poster_image)
fun bindItem(data: Film, listener: (Film) -> Unit, context: Context){
tvJudul.setText(data.judul)
tvGenre.setText(data.genre)
tvRating.setText(data.rating)
Glide.with(context)
.load(data.poster)
.into(ivPoster)
itemView.setOnClickListener{
listener(data)
}
}
}
}
fragment_tiket.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_background_blue"
tools:context=".home.tiket.TiketFragment">
<TextView
android:id="@+id/textView15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="24dp"
android:fontFamily="@font/montserrat"
android:text="Today's"
android:textColor="@color/white"
android:textSize="24sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginLeft="24dp"
android:fontFamily="@font/montserrat"
android:text="4 Movies"
android:textColor="@color/white_grey"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView15" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rc_ticket"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="24dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:layout_marginRight="24dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_total"
tools:itemCount="4"
tools:listitem="@layout/row_item_coming_soon" />
</androidx.constraintlayout.widget.ConstraintLayout>
解决方案
推荐阅读
- java - 捕获 JTextField 中是否有数字
- python - 使用 Pandas 在同一日期删除特定时差的连续重复项
- git - 无法连接到存储库执行命令 GitHub Jenkins 插件时出错
- laravel - 使用 Jetstream 创建帐户时无法将角色附加到用户 - Laravel
- google-kubernetes-engine - 在 Google Kubernetes Engine 上安排集群调整大小
- mysql - 创建一个mysql查询或作业,自动将信息从一个表复制到另一个表,而不是事件
- mysql - 如何将 MYSQL EXISTS 的 mysql 别名修改为 0 和 1,就像连接的 mysql 表中的记录一样?
- python - SymPy 的solve() 如何找到非线性系统的解?
- python - 打开多个具有不同名称的文本文件
- python - 在 numpy 中,我们如何检测 uint32/int32 上溢或下溢?