首页 > 解决方案 > 通过接口传递值

问题描述

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

interface RadioGroupHelperInterface {
fun onSelect(selectedItem: String)
}

然后我有一个类,我想从中传递选中的单选按钮的值。

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
                    }
                }
            }
        }
    }
}
}

最后我的活动如下:

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()
}
}

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

标签: androidkotlininterfaceradio-button

解决方案


radioGroupHelpedInterface除了 null 之外,您不会将field 设置为任何值,这是它的初始状态。你为什么不试试这个:

声明GRadioGroupHelper如下:

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

这将允许您避免RadioGroupHelperInterface实例的可空性,并且您还可以通过构造函数在活动中设置它,如下所示:

val radioGRadioGroupHelper = GRadioGroupHelper(this)

请注意,我更改var为,val因为我们不希望您radioGRadioGroupHelper更改。


推荐阅读