RecyclerView Button-only item onClick

问题描述 投票:0回答:2

所以我正在做按钮的RecyclerView。而且我不知道如何/在何处为按钮编写onClick。我有一个要传递的JSONArray,按钮的文本将带有cName

这是我的item_unit.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/btn_unit"
        android:background="#000000"
        android:textColor="#ffffff"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

这是我的ItemAdapter

//Here the stype is <CategoryItem> because this button will open
//new fragment to show the list of the items.
//So it's recyclerview item opens another recyclerview.

class CatAdapter(var btnList: ArrayList<CategoryItem>, var context: Context): RecyclerView.Adapter<ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var v: View = LayoutInflater.from(context).inflate(R.layout.item_unit, parent, false)
        return ViewHolder(v)
    }


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


    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val data = btnList[position]
        holder.itemBtn.text = data.name
    }

}

class ViewHolder(view: View): RecyclerView.ViewHolder(view){
    var itemBtn = view.findViewById<Button>(R.id.item_btn)
}

此回收者视图在一个片段中。我需要

class MainActFrag : Fragment() {

    var btnList = ArrayList<CategoryItem>()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        // Inflate the layout for this fragment
        var view =  inflater.inflate(R.layout.fragment_main_act, container, false)

        //Recycler view
        view.recyclerView.layoutManager = LinearLayoutManager(context)

       //I have the url 

        var stringRequest = StringRequest(Request.Method.GET, url,

            Response.Listener {

                var jsonObject = JSONObject(it)

                var jsonArrayCates =jsonObject.getJSONArray("category")

                for(i in 0 until jsonArrayCats.length()){

                    var btns =jsonArrayCates.getJSONObject(i)

                    var iD = btns.getString("id")
                    var name = btns.getString("name")
                    var des = btns.getString("description")

                    btnList.add(CategoryItem(cID, cName, cDes))
                }

                val adapter = ItemAdapter(btnList, view.context)
                recyclerView.adapter = adapter
            },
            Response.ErrorListener {}
        )

        Volley.newRequestQueue(view.context).add(stringRequest)

        return view
    }

}

所以我不知道在哪里将每个项目称为onClick。如果它只是普通的TextView项,我可以做到,但是由于我选择将其设为button,因此我不知道处理该问题的具体方法。我认为这会很容易,因为该按钮是...自然可点击的?

谢谢!

android kotlin android-recyclerview android-button
2个回答
1
投票

向ViewHolder类添加绑定函数,然后可以将单击处理程序放在每个按钮上

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val data = btnList[position]
        holder.itemBtn.text = data.name
        holder.bindButtons()
    }
    class ViewHolder(view: View): RecyclerView.ViewHolder(view){
       var itemBtn = view.findViewById<Button>(R.id.item_btn)

       fun bindButtons()
          itemBtn.setOnClickListener{
            //do you click event stuff
          }
     }
© www.soinside.com 2019 - 2024. All rights reserved.