在我的MainActivity
上有一个Button
和RecyclerView
,带有CheckedTextView
的适配器。
我想在点击Button
时启用CheckedTextView
。
我可以通过将Button
上下文设置为static
来实现它,但这不是很好(内存泄漏等)
我试图从context
获取按钮并在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
}
}
激活Button
的最佳方法是什么?是否可以为RecyclerView
设置监听器?
答案 0 :(得分:1)
是的,有可能。您可以创建一个这样的自定义界面:
public interface RecyclerViewClickListener {
void recyclerViewItemClicked(View view, int position);
}
并在您的适配器内部:
class AndroidDeviceAdapter(internal var context: Context, private val devices: Array<String>) :
RecyclerView.Adapter<AndroidDeviceAdapter.MyViewHolder>() {
...
private RecyclerViewClickListener recyclerViewClickListener;
...
public void setRecyclerViewClickListener(RecyclerViewClickListener recyclerViewClickListener)
{
this.recyclerViewClickListener=recyclerViewClickListener;
}
...
然后添加项目点击监听器:
holder.simpleCheckedTextView.setOnClickListener {
recyclerViewClickListener.recyclerViewItemClicked(holder.simpleCheckedTextView, getAdapterPosition());
}
然后将侦听器附加到要执行所需动作的活动中。
我的一些代码片段都是Java风格的。与您的Kotlin代码结合在一起的地方。请记住要排序并使其适应Kotlin。良好的编码
答案 1 :(得分:0)
请尝试以下操作。
(context as OrderActivity).order_button.isEnabled = true
假设order_button
是您的OrderActivity
中的变量。
答案 2 :(得分:0)
您可以在function amIAWeekend(someDate){
return someDate.getDay() == 6 || someDate.getDay() == 0;
}
内定义一个接口,如下所示:
AndroidDeviceAdapter
适配器的构造函数应该使用interface MyCheckedTextListener {
fun onCheckedTextClicked()
}
参数来代替Context
参数:
MyCheckedTextListener
实例化适配器时,class AndroidDeviceAdapter(internal var checkedTextListener: MyCheckedTextListener,
private val devices: Array<String>) : RecyclerView.Adapter<MyListAdapter.MyViewHolder>()
必须传入Activity
的实例。
适配器将通过以下实例通知MyCheckedTextListener
:
Activity
因此override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
holder?.simpleCheckedTextView?.setOnClickListener {
checkedTextListener.onCheckedTextClicked()
}
}
可以设置新的Activity
状态(而Button
可以保持Button
而不是private
)