首页 > 解决方案 > 数据未出现在 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>

标签: androidfirebasekotlinfirebase-realtime-database

解决方案


推荐阅读