Android 如何为RecyclerView适配器设置侦听器?
在我的Android 如何为RecyclerView适配器设置侦听器?,android,android-recyclerview,kotlin,Android,Android Recyclerview,Kotlin,在我的main活动中有一个按钮和回收视图,带有CheckedTextView的适配器 当点击CheckedTextView时,我想启用按钮 我可以通过将按钮上下文设置为静态来实现它,但这并不好(内存泄漏等) 我试图从上下文中获取按钮,并在simpleCheckedTextView中启用它。setOnClickListener: class AndroidDeviceAdapter(internal var context: Context, private val devices: Array&
main活动中
有一个按钮
和回收视图
,带有CheckedTextView
的适配器
当点击CheckedTextView
时,我想启用按钮
我可以通过将按钮
上下文设置为静态
来实现它,但这并不好(内存泄漏等)
我试图从上下文中获取按钮,并在simpleCheckedTextView中启用它。setOnClickListener
:
class AndroidDeviceAdapter(internal var context: Context, private val devices: Array<String>) :
RecyclerView.Adapter<AndroidDeviceAdapter.MyViewHolder>() {
inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
...
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
...
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
...
holder.simpleCheckedTextView.setOnClickListener {
// Getting exception
(context as Activity).findViewById<Button>(order_button).isEnabled = true
}
}
类AndroidDeviceAdapter(内部变量上下文:上下文,私有val设备:数组):
RecyclerView.Adapter(){
内部类MyViewHolder(视图:视图):RecyclerView.ViewHolder(视图){
...
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):MyViewHolder{
...
}
覆盖onBindViewHolder(holder:MyViewHolder,位置:Int){
...
holder.simpleCheckedTextView.setOnClickListener{
//破例
(作为活动的上下文)。findViewById(订单按钮)。isEnabled=true
}
}
激活按钮的最佳方法是什么?是否可以为RecyclerView
设置侦听器?可以。您可以创建如下自定义界面:
公共接口RecycleServiceClickListener{
void recycleServiceItemClicked(视图,int位置);
}
在适配器内部:
类AndroidDeviceAdapter(内部变量上下文:上下文,私有val设备:数组):
RecyclerView.Adapter(){
...
私有RecycleWebClickListener RecycleWebClickListener;
...
public void setRecycleWebClickListener(RecycleWebClickListener RecycleWebClickListener)
{
this.recyclerViewClickListener=recyclerViewClickListener;
}
...
然后单击“添加项目侦听器”:
holder.simpleCheckedTextView.setOnClickListener{
RecycleServiceClickListener.RecycleServiceItemClicked(holder.simpleCheckedTextView,getAdapterPosition());
}
然后将侦听器附加到要执行所需操作的活动中
我的一些代码片段是java风格的。与您的kotlin代码结合在一起。请记住对其进行排序并使其适应kotlin。良好的编码请尝试以下内容
(context as OrderActivity).order_button.isEnabled = true
假设order\u按钮
是OrderActivity
中的一个变量,您可以在AndroidDeviceAdapter
中定义一个接口,如下所示:
interface MyCheckedTextListener {
fun onCheckedTextClicked()
}
适配器的构造函数应该采用MyCheckedTextListener
参数,而不是Context
参数:
class AndroidDeviceAdapter(internal var checkedTextListener: MyCheckedTextListener,
private val devices: Array<String>) : RecyclerView.Adapter<MyListAdapter.MyViewHolder>()
因此,活动
可以设置新的按钮
状态(并且按钮
可以保持私有
和非静态
)尝试将适配器设置为活动的内部类。这样,您就可以访问活动的button变量。或者在将上下文转换为特定活动类后,使用“点”操作员访问该按钮。我假设您的按钮不在“回收器”视图保持架中。请共享您的活动代码。谢谢,在更改为(上下文为活动)后。order_button.isEnabled=true
如您所建议,我注意到我通过了applicationContext
(应用程序上下文)而不是this@OrderActivity
(活动上下文)
override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
holder?.simpleCheckedTextView?.setOnClickListener {
checkedTextListener.onCheckedTextClicked()
}
}