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{为什么不将其作为构造函数参数发送?