kotlin, отображающий данные из базы данных Firebase в RecyclerView во фрагменте - PullRequest
0 голосов
/ 03 октября 2019

Это мой первый раз, когда я создаю приложение. Я хочу, чтобы мои данные отображались в базе данных Firebase Realtimed. но 'E / RecyclerView: адаптер не подключен;Пропуск макета »находится на графике выполнения.

Сначала я покажу вам свои коды.

Сначала это мой класс данных в kotlin

data class BalInputDTO(
var Id : String? = null,
var Itype: String? = null,
var Icategory: String? = null,
var ldate : String? = null,
var balance: String? = null,
var commnet: String? = null)

а потом это мой адаптер.kt

class BalAdapter(val context: Context, val BalList: ArrayList<BalInputDTO>) :
RecyclerView.Adapter<BalAdapter.Holder>() {

override fun onBindViewHolder(holder: Holder, position: Int) {
    holder?.bind(BalList[position], context)
}


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
    val view = LayoutInflater.from(context).inflate(R.layout.household_detail, parent, false)
    return Holder(view)
}

override fun getItemCount(): Int {
    return BalList.size
}


inner class Holder(view: View?) : RecyclerView.ViewHolder(view!!) {
    val recordCategory = view?.findViewById<TextView>(R.id.record_category)
    val recordNote = view?.findViewById<TextView>(R.id.record_note)
    val recordAmount = view?.findViewById<TextView>(R.id.record_amount)
    val recordDate = view?.findViewById<TextView>(R.id.record_date)
    val recordDeleteImageView = view?.findViewById<ImageButton>(R.id.record_delete_image_button)

    fun bind(bal: BalInputDTO, context: Context) {
        recordCategory?.text = bal.Icategory
        recordNote?.text = bal.commnet
        recordAmount?.text = bal.balance
        recordDate?.text = bal.ldate
        //  recordDeleteImageView.imageb
    }
}
}

и последний код. это мой Fragment.kt (только часть onCreatView)

var fragmentView : View? = null
var firedatabase : FirebaseDatabase? = null
var BalList : ArrayList<BalInputDTO> ? = null
var ref : DatabaseReference? = null

var mRecyclerView : RecyclerView? =null

override fun onCreateView(

    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?

): View? {
     fragmentView= LayoutInflater.from(activity).inflate(R.layout.fragment_household, container, false)

     firedatabase = FirebaseDatabase.getInstance()


     mRecyclerView = fragmentView?.findViewById(R.id.household_recyclerview)
     mRecyclerView?.setHasFixedSize(true)
     mRecyclerView?.layoutManager = LinearLayoutManager(context)


    BalList = arrayListOf<BalInputDTO>()
    ref = FirebaseDatabase.getInstance().getReference("BalInput")


    ref?.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

        override fun onDataChange(p0: DataSnapshot) {


            if(p0!!.exists()){

                for (h in p0.children){
                    val bal = h.getValue(BalInputDTO::class.java)
                    BalList?.add(bal!!)
                }

                val adapter = BalAdapter(context!!,BalList = ArrayList<BalInputDTO>())
                mRecyclerView?.setAdapter(adapter)

            }

        }
    })

    return  fragmentView
}

, а это моя база данных введите описание изображения здесь

Пожалуйста, дайте мне знать, если я что-то пропустил илисделал что-то не так.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Похоже, вы передали неправильный список вашему адаптеру. Попробуйте это

val adapter = BalAdapter(context!!,BalList)

вместо

val adapter = BalAdapter(context!!,BalList = ArrayList<BalInputDTO>())
0 голосов
/ 03 октября 2019

Я бы сказал, что настоящая проблема заключается в этой строке

 val adapter = BalAdapter(context!!,BalList = ArrayList<BalInputDTO>())

, попробуйте изменить ее на:

 val adapter = BalAdapter(context!!,BalList)

, поскольку именно здесь вы добавляете все элементы из FB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...