【问题标题】:Button on item in RecyclerView using FirebaseRecyclerAdapter with Kotlin使用带有 Kotlin 的 FirebaseRecyclerAdapter 在 RecyclerView 中的项目上的按钮
【发布时间】:2021-03-09 11:49:47
【问题描述】:

我的活动看起来像这样...

class UtfordringerActivity : AppCompatActivity() {

    private lateinit var mRecyclerView: RecyclerView
    lateinit var mDatabase: DatabaseReference


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_utfordringer)
        supportActionBar?.title = "Utfordringer"

        recyclerview_utfordringer.layoutManager = LinearLayoutManager(this)

        // Firebase Realtime db noden vi setter inn i recyclerviewet
        mDatabase = FirebaseDatabase.getInstance().getReference("Utfordringer")
        mRecyclerView = findViewById(R.id.recyclerview_utfordringer)

        updateToRecyclerView()
    }



    // Funksjon som henter data og setter inn i RecyclerViewet med FirebaseRecyclerAdapter
    private fun updateToRecyclerView() {

        val firebaseRecyclerAdapter = object : FirebaseRecyclerAdapter<Utfordringer, CustomViewHolder>(
                Utfordringer::class.java,
                R.layout.utfordring_item,
                CustomViewHolder::class.java,
                mDatabase
        ) {
            override fun populateViewHolder(viewHolder: CustomViewHolder?, model: Utfordringer?, position: Int) {

                if (model != null) {
                    viewHolder?.itemView?.recyclerview_text_1?.text = model.kategori
                }
                if (model != null) {
                    viewHolder?.itemView?.recyclerview_text_2?.text = model.utfordring
                }
            }
        }
        mRecyclerView.adapter = firebaseRecyclerAdapter
    }


    // Viewholder
    class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {


    }

}

在从 Firebase Realtime Db 获取数据并按预期工作后,我的 recyclerview 看起来像这样。还没有为 thrashcan 按钮实现任何东西,因为那是麻烦开始的时候。

My RecyclerView

我想让该按钮同时从 recyclerview 和 Firebase Realtime Db 中删除该项目。但据我了解,将 onClickListener 放在 recyclerview 中的按钮上会产生错误...

recyclerview 中的项目使用来自另一个 Activity 的此代码保存在 Firebase 中

 private fun lagreUtfor() {
        val kategori = utfordring_kat_text.text.toString()
        val utfordring = utfordring_text.text.toString()

        if (kategori.isEmpty() || utfordring.isEmpty()) {
            Toast.makeText(this, "Vennligst fyll ut feltene", Toast.LENGTH_SHORT).show()
        } else
            if (kategori.isNotEmpty() || utfordring.isNotEmpty()) {
                val map = mutableMapOf<String, Any>()
                map["kategori"] = kategori
                map["utfordring"] = utfordring
                FirebaseDatabase.getInstance().reference
                        .child("/Utfordringer")
                        .push()
                        .setValue(map)
                Toast.makeText(this, "Lagret", Toast.LENGTH_SHORT).show()
            }

    }

我不是在寻找完整的解决方案,也不是在不学习的情况下免费获得任何东西。我只是希望有人能指出我正确的方向或帮助我一点:)

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database android-recyclerview


    【解决方案1】:

    您可以将 onClick 监听器放在 recyclerView 项目上。在项目适配器中复制以下内容:

    private var onClickListener: OnClickListener? = null
    
     fun setOnClickListener(onClickListener: OnClickListener)
        {
            this.onClickListener = onClickListener
        }
    
    
    interface OnClickListener
        {
            fun onClick(position: Int, model: YourItemModel)
        }
    

    在你的 onBindViewHolder 中放这个:

    holder.itemView.setOnClickListener {
                    if (onClickListener != null)
                    {
                        onClickListener!!.onClick(position, model)
                    }
                }
    

    最后,当你设置你的 recyclerView 时,只需像这样使用适配器:

    adapter.setOnClickListener(object : SomethingAdapter.OnClickListener
            {
                override fun onClick(position: Int, model: YourItemModel) {
                   
                }
            })
    

    您甚至可以使用Swipe to do something callback 向左/向右滑动对 recyclerView 项目执行某些操作。

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多