底部OnClickListener始终无法解析

时间:2019-04-27 23:06:37

标签: android kotlin android-recyclerview onclicklistener

在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已解决。我的意思是说,它不会进一步寻找所需的内容,而只会依赖于已初始化的对象。

是否可以解决此问题?有一个更好的方法吗?我很想将两个按钮放在同一位置,给它们每个按钮一个按钮并交换其可见性,但这似乎是对资源的浪费。

1 个答案:

答案 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 会更好。您可以简单地保存您所处的状态,单击按钮时,只需检查您所处的状态,执行操作,然后更改状态即可。这样,您就不必担心切换听众的麻烦了。