Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:Kotlin将数据从对话框传递到DialogFragment_Android_Kotlin_Android Fragments - Fatal编程技术网

Android:Kotlin将数据从对话框传递到DialogFragment

Android:Kotlin将数据从对话框传递到DialogFragment,android,kotlin,android-fragments,Android,Kotlin,Android Fragments,我试图将数据从对话框传递到底部的工作表片段。下面是我的底部工作表片段如何打开对话框片段 editAddDate.setOnClickListener{ val timeDatePickerDialog = TimeDatePickerDialog(requireContext()) timeDatePickerDialog.setOnDismissListener(this) timeDatePickerDi

我试图将数据从对话框传递到底部的工作表片段。下面是我的底部工作表片段如何打开对话框片段

     editAddDate.setOnClickListener{
             val timeDatePickerDialog = TimeDatePickerDialog(requireContext())
             timeDatePickerDialog.setOnDismissListener(this)
             timeDatePickerDialog.show()



         }
在我的对话框片段中,我实现了对话框(上下文),TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener如下所示:

class TimeDatePickerDialog(context: Context) : Dialog(context),TimePickerDialog.OnTimeSetListener,
    DatePickerDialog.OnDateSetListener {

    private lateinit var pickDate: TextView
    private lateinit var pickTime: TextView
    private lateinit var repeat: TextView
    private lateinit var done: TextView
    private lateinit var cancel: TextView
    private lateinit var selectedDate: String
    private lateinit var selectedTime: String
    private lateinit var binding: TimeDatePickerDialogBinding


    var day=0
    var month=0
    var year=0
    var time=0
    var minutes=0

    var savedDay=""
    var savedMonth=""
    var savedYear=""
    var savedTime=0
    var savedMinutes=0



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.inflate(
            LayoutInflater.from(context),
            R.layout.time_date_picker_dialog,
            null,
            false
        )

        setContentView(binding.getRoot())



        pickDate=binding.setDate
        pickTime=binding.setTime
        repeat=binding.repeat
        cancel=binding.cancel
        done=binding.done

        initView()


    }


    override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
        savedTime=hourOfDay
        savedMinutes=minute
        var time="$savedTime:$savedMinutes"
        selectedTime=time
        pickTime.text=selectedTime
    }

    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
        savedDay=dayOfMonth.toString()
        var currentMonth=month+1
        savedMonth=currentMonth.toString()
        savedYear=year.toString()
        var date="$savedDay,$savedMonth $savedYear"
        selectedDate=date

        pickDate.text = selectedDate

    }

    private fun getDateTimeCalendar(){
        val c=Calendar.getInstance()
        day=c.get(Calendar.DAY_OF_MONTH)
        month=c.get(Calendar.MONTH)
        year=c.get(Calendar.YEAR)
        time=c.get(Calendar.HOUR)
        minutes=c.get(Calendar.MINUTE)

    }

    private fun initView() {

        pickDate.setOnClickListener {
            getDateTimeCalendar()
            DatePickerDialog(context, R.style.PickerDialogTheme, this, year, month, day).show()

        }

        pickTime.setOnClickListener {
            getDateTimeCalendar()
            TimePickerDialog(context, R.style.PickerDialogTheme, this, time, minutes, true).show()
        }

        cancel.setOnClickListener {
            dismiss()
        }


       done.setOnClickListener {

            dismiss()}


    }


}




我想在单击“完成”时将日期和时间从此对话框发送到底部工作表对话框我找不到执行此操作的方法我尝试了共享视图模型,但遇到的问题超出了我的预期我可以用简单的方法执行此操作吗最简单的解决方案只是定义一个界面:

class TimeDatePickerDialog(context: Context) : Dialog(context) {

    interface OnDateSelectedListener {
        fun onDateSelected(date: Date)
    }

    private lateinit var selectedDate : Date
    var onDateSelectedListener : OnDateSelectedListener? = null

    fun initView() {
        doneButton.setOnClickListener {
            dismiss()
            onDateSelectedListener?.onDateSelected(selectedDate)
        }
    }
}

在实例化DatePicker对话框后,从BottomSheetDialog设置侦听器最简单的解决方案就是定义一个接口:

class TimeDatePickerDialog(context: Context) : Dialog(context) {

    interface OnDateSelectedListener {
        fun onDateSelected(date: Date)
    }

    private lateinit var selectedDate : Date
    var onDateSelectedListener : OnDateSelectedListener? = null

    fun initView() {
        doneButton.setOnClickListener {
            dismiss()
            onDateSelectedListener?.onDateSelected(selectedDate)
        }
    }
}

在实例化DatePicker对话框后,从BottomSheetDialog设置侦听器最后,我找到了一种使用sharedViewModel的方法,但您必须扩展DialogFragment()而不是Dialog(上下文),并声明一个变量来保存您在本例中创建的sharedViewModel值:
private val bottomSheetViewModel:bottomSheetViewModel by activityViewModels()

最后,我找到了一种使用sharedViewModel的方法,但您必须扩展DialogFragment(),而不是Dialog(context),并声明一个变量来保存您在本例中创建的sharedViewModel值:
private val bottomSheetViewModel:bottomSheetViewModel by activityViewModels()

这是否回答了您的问题?TimeDatePickerDialog是您的类吗?@JavadDehban否,因为我使用的是主机活动和多个片段,所以我能够通过导航组件在我的应用程序中使用的其他片段中传递数据,但我不知道为什么在对话框和底页中我不能这样做that@MingkangPanTimeDatePickerDialog是我的类,声明如下。类TimeDatePickerDialog(上下文:上下文):对话框(上下文),TimePickerDialog.OnTimeSetListener,DatePickerDialog.OnDateSetListener{为什么不将其作为构造函数参数发送?这是否回答了您的问题?TimeDatePickerDialog是您的类吗?@JavadDehban否,因为我使用的是主机活动和多个片段,我能够通过导航组件在我的应用程序中使用的其他片段中传递数据,但我不知道为什么在对话框和底部工作表中我不能这样做that@MingkangPan TimeDatePickerDialog是我的类,声明如下。类TimeDatePickerDialog(上下文:上下文):对话框(上下文),TimePickerDialog.OnTimeSetListener,DatePickerDialog.OnDateSetListener{为什么不将其作为构造函数参数发送?