底部OnClickListener始终未解析

问题描述 投票:-3回答:1

我的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并交换他们的可见性,但这似乎是浪费资源。

android kotlin android-recyclerview onclicklistener
1个回答
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会更好。您可以简单地保存您所处的状态,单击该按钮时,您只需检查您所处的状态,执行操作,然后更改状态。这样你就不必担心切换你的听众了,这可能会变得混乱。

© www.soinside.com 2019 - 2024. All rights reserved.