我有一个Activity
,其中包含一个简单的TextView
,我想打开一个DialogFragment
,从SeekBar
中选择一个值,然后将此值返回到{ {1}},所以我可以设置Activity
的值。
我不想用TextView
来做,但是如果没有其他方法,那也是可以接受的。
这是我的interface
:
Dialog
将值从class PainScaleDialogFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.pain_scale_dialog, container)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val colorSeekBar = view.findViewById<ColorSeekBar>(R.id.colorSlider)
val cancelButton = view.findViewById<Button>(R.id.cancel_button)
val confirmButton = view.findViewById<Button>(R.id.confirm_button)
val painValue = view.findViewById<TextView>(R.id.pain_value)
colorSeekBar.setMaxPosition(100)
colorSeekBar.setColorSeeds(resources.getIntArray(R.array.pain_scale)) // material_colors is default included in res/color,just use it.
colorSeekBar.colorBarPosition = 10 //0 - maxValue
colorSeekBar.alphaBarPosition = 10 //0 - 255
colorSeekBar.isShowAlphaBar = false
colorSeekBar.setBarHeight(20F) //20dpi
colorSeekBar.setThumbHeight(30F) //30dpi
colorSeekBar.setBarMargin(10F) //set the margin between colorBar and alphaBar 10dpi
cancelButton.setOnClickListener {
}
confirmButton.setOnClickListener {
//painScale.editText?.setText(colorSeekBar.colorBarValue?.toString())
}
colorSeekBar.setOnColorChangeListener { colorBarPosition, alphaBarPosition, color ->
painValue.setTextColor(color)
painValue.text = colorBarPosition.toString()
}
}
}
发送到Dialog
的最佳方法是什么?
也需要Java答案。
答案 0 :(得分:0)
由于您不喜欢接口方法,因此建议您使用LiveData
:DialogFragment
和AppCompatActivity
都是LifecycleOwner
s,因此它们可以使用ViewModel
访问单例存储库,您可以根据自己的需求实施该存储库。
在LiveData
上有很多不错的教程,因此,我仅为您的情况提供一个可能的解决方案:
为了获取TextView
的颜色值,ViewModel
的{{1}}将具有一个功能
Activity
fun getColorInt(): LiveData<Int>
的{{1}}需要一个函数
ViewModel
单例存储库类将具有类似字段
DialogFragment
请注意,虽然fun setColorInt(colorInt: Int)
对象是公共的,但是链接的private val _colorInt : MutableLiveData<Int> = MutableLiveData<Int>()
val colorInt : LiveData<Int> = _colorInt
对象是私有的。最后,您需要一个函数来在存储库中设置color int值:
LiveData