通过接口传递价值

Passing value through Interface

我是 kotlin 的新手,我正在尝试通过界面将选中单选按钮的值从一个 class 传递到另一个 activity。我有一个名为 RadioGroupHelperInterface 的接口 as

interface RadioGroupHelperInterface {
fun onSelect(selectedItem: String)
}

然后我有一个 class 从那里我想传递选中的单选按钮的值。

class GRadioGroupHelper {

 private val radioGroupHelperInterface: RadioGroupHelperInterface? = null


fun setRadioExclusiveClick(parent: ViewGroup?) {
    val radios: List<RadioButton>? = parent?.let { getRadioButtons(it) }
    if (radios != null) {
        for (radio in radios) {
            radio.setOnClickListener { v ->
                val r: RadioButton = v as RadioButton
                r.isChecked = true
                radioGroupHelperInterface?.onSelect(r.text as String)

                checkedValue = r.text as String

                for (r2 in radios) {
                    if (r2.getId() !== r.getId()) {
                        r2.isChecked = false
                    }
                }
            }
        }
    }
}
}

最后我的activity如下:

class ChooseCategoryActivity : AppCompatActivity(), View.OnClickListener,RadioGroupHelperInterface {
        var radioGRadioGroupHelper=GRadioGroupHelper()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_choose_category)
    setListener()
    val parent: ViewGroup = findViewById(R.id.svCategories)
    radioGRadioGroupHelper.setRadioExclusiveClick(parent)

}
override fun onSelect(selectedItem: String) {
    Log.e("Here","reached")
    Log.e("value",selectedItem)
    Toast.makeText(this,selectedItem,Toast.LENGTH_LONG).show()
}
}

但是我无法从 activity 中获取我在单选框中选中的值,尽管可以在 RadioGRadioGroupHelper class 中打印该值。有人可以帮我吗?

您没有将 radioGroupHelpedInterface 字段设置为除 null 以外的任何值,null 是其初始状态。你为什么不试试这个:

声明您的 GRadioGroupHelper 如下:

class GRadioGroupHelper (private val helperInterface: RadioGroupHelperInterface) {
    // All your logic remains the same
}

这将允许您避免 RadioGroupHelperInterface 实例的空性,您还可以通过 activity:

中的构造函数设置它
val radioGRadioGroupHelper = GRadioGroupHelper(this)

请注意,我将 var 更改为 val,因为我们不希望您的 radioGRadioGroupHelper 发生变化。