如何将一个DialogFragment中的值发送回Activity?

时间:2019-11-11 18:14:35

标签: android kotlin android-activity android-dialogfragment

我有一个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答案。

1 个答案:

答案 0 :(得分:0)

由于您不喜欢接口方法,因此建议您使用LiveDataDialogFragmentAppCompatActivity都是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