通过接口传递价值
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
发生变化。
我是 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
发生变化。