在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无法解析。如果我切换两个声明和初始化的onClickListener的顺序,则该行
view.ingEditButton.setOnClickListener(ocl1)
错误,因为ocl1已解决。我的意思是说,它不会进一步寻找所需的内容,而只会依赖于已初始化的对象。
是否可以解决此问题?有一个更好的方法吗?我很想将两个按钮放在同一位置,给它们每个按钮一个按钮并交换其可见性,但这似乎是对资源的浪费。
答案 0 :(得分:1)
使用对象之前,需要先声明它们。
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
会更好。您可以简单地保存您所处的状态,单击按钮时,只需检查您所处的状态,执行操作,然后更改状态即可。这样,您就不必担心切换听众的麻烦了。