当前位置: 首页 > 知识库问答 >
问题:

如何添加一个点击侦听器到我的回收器视图(Android kotlin)[复制]

鲜于浩淼
2023-03-14

我有一个有2个元素的回收器视图。我想添加2个按钮来做不同的事情(取决于回收器视图的哪个元素。怎么可能做到这一点?我的元素是文本视图

设置ctiv.kt

class SettingsActiv : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)

        val arrow_backBtn = findViewById(R.id.settingsToolbarBtn) as Button
        arrow_backBtn.setOnClickListener{
            startActivity(Intent(this, MainActivity::class.java))
        }

        val linearLayout  = findViewById(R.id.constr) as LinearLayout
        val recyclerView =  RecyclerView(this)
        val series = ArrayList<SeriesModel>()
        recyclerView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
        series.add(SeriesModel("Unit of length","Meter"))
        series.add(SeriesModel("Unit of temperature","Celcius"))
        val adapter = MyAdapter(series)
        recyclerView.setHasFixedSize(true)
        recyclerView.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL, false)
        recyclerView.adapter = adapter
        linearLayout.addView(recyclerView,1)
}

我的适配器。kt

class MyAdapter(private val seriesList: ArrayList<SeriesModel>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.MyViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.activity_settings_child, parent, false)
        return MyViewHolder(v)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.textViewName.text = seriesList[position].name
        holder.textViewNameDesc.text = seriesList[position].desc

    }

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

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textViewName = itemView.findViewById(R.id.name) as TextView
        val textViewNameDesc = itemView.findViewById(R.id.desc) as TextView

    }
}

共有1个答案

奚飞星
2023-03-14

试试这个

 override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.textViewName.text = seriesList[position].name
        holder.textViewNameDesc.text = seriesList[position].desc

        holder.textViewName.setOnClickListener {
            Toast.makeText(context,"clicked",Toast.LENGTH_SHORT).show()
        }


    }
 类似资料:
  • @覆盖公共void onBindViewHolder(@NonNull ViewHolder holder,int位置){ 在onBindViewHolder中,我想调用另一个活动,但每次调用侦听器时,都会打开同一个活动。注意:Recycler是通过另一个cardview活动从MYSQL获取值的

  • 我正在尝试在我的 上实现 ,但我没有得到任何结果。 我遵循了这个教程和这个技巧,但是没有人为我工作。 我已经实现了: 但它不让我编译,因为它们是不同的< code > viewmoder ,因为我创建了两个< code > viewmoder 类,但它们< code >扩展了Recycler。ViewHolder所以我不明白... 我正在尝试这样做,因为我有一个,我希望当列表为空时,它会显示一个,

  • 问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现

  • 请帮助如何使其工作

  • 如何在回收者视图中收听触摸事件?我已经为视图持有者实现了click listener,但它可以在整个视图上工作。我在每个视图支架中都有一个图像视图,当用户单击图像视图时,我需要执行一个操作。 当前视图持有者代码。