我的recyclerview中有一个简单的按钮,当第一次点击时它应该使文本可编辑,当第二次点击时,它应该确认更改。我遇到的问题是我有两个onClickListeners设置,但它们互相引用,底部可以始终解析顶部,但最上面的一个无法解析底部的。
Recyclerview:bindIngredient
fun bindIngredient(ingredient: ListIngredientsQuery.Item, clickListener: RecyclerViewClickListener) {
val ocl1 = View.OnClickListener{
//Text Editable
view.ingEditText.setText(view.ingNameTV.text.toString())
view.ingNameTV.visibility = View.GONE
view.ingEditText.visibility = View.VISIBLE
view.ingEditButton.text = "Confirm"
view.ingEditButton.setOnClickListener(ocl2)
}
var ocl2 = View.OnClickListener {
//Text Not Editable
view.ingNameTV.text = view.ingEditText.text
view.ingEditText.visibility = View.GONE
view.ingNameTV.visibility = View.VISIBLE
view.ingEditButton.setOnClickListener(ocl1)
clickListener.onConfirmSelect(ingredient)
}
this.ingredient = ingredient
view.ingNameTV.text = ingredient.name()
view.ingEditButton.setOnClickListener(ocl1)
view.veganSpinner.setSelection(Vegan.valueOf(ingredient.vegan().toString()).ordinal, false)
view.gfSpinner.setSelection(GlutenFree.valueOf(ingredient.glutenfree().toString()).ordinal, false)
}
在这个例子中的行
view.ingEditButton.setOnClickListener(ocl2)
错误,因为ocl2未解决。如果我切换正在声明和初始化的两个onClickListeners的顺序,那么该行
view.ingEditButton.setOnClickListener(ocl1)
错误,因为ocl1已解决。我认为这意味着它不会向下看以找到它需要的东西,它只依赖于已经初始化的对象。
有没有办法来解决这个问题?有一个更好的方法吗?我很想把两个按钮放在同一个位置,给他们各自自己的onclicklistener并交换他们的可见性,但这似乎是浪费资源。
您需要在使用它们之前声明对象。
fun bindIngredient(ingredient: ListIngredientsQuery.Item, clickListener: RecyclerViewClickListener) {
val ocl1: View.OnClickListener
val ocl2: View.OnClickListener
ocl1 = View.OnClickListener{
//Text Editable
view.ingEditText.setText(view.ingNameTV.text.toString())
view.ingNameTV.visibility = View.GONE
view.ingEditText.visibility = View.VISIBLE
view.ingEditButton.text = "Confirm"
view.ingEditButton.setOnClickListener(ocl2)
}
ocl2 = View.OnClickListener {
//Text Not Editable
view.ingNameTV.text = view.ingEditText.text
view.ingEditText.visibility = View.GONE
view.ingNameTV.visibility = View.VISIBLE
view.ingEditButton.setOnClickListener(ocl1)
clickListener.onConfirmSelect(ingredient)
}
this.ingredient = ingredient
view.ingNameTV.text = ingredient.name()
view.ingEditButton.setOnClickListener(ocl1)
view.veganSpinner.setSelection(Vegan.valueOf(ingredient.vegan().toString()).ordinal, false)
view.gfSpinner.setSelection(GlutenFree.valueOf(ingredient.glutenfree().toString()).ordinal, false)
}
但是,如果你只使用一个OnClickListener
会更好。您可以简单地保存您所处的状态,单击该按钮时,您只需检查您所处的状态,执行操作,然后更改状态。这样你就不必担心切换你的听众了,这可能会变得混乱。