android - 如何将数据从 DialogFragment 传递到 android / Kotlin 中的片段
问题描述
我是 Android 应用程序开发和 Kotlin 的新手。当用户设置时间时,我需要从 DialogFragment 传递时间来更新片段(这是一个选项卡)上的按钮文本。任何建议如何做到这一点。我已阅读有关 viewModel 或使用接口的信息,但我无法在我的代码中真正实现它们。
这是我的fragment_weight.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Weight">
<Button
android:id="@+id/btnTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Time"
android:layout_gravity="top|left" />
</FrameLayout>
这是我的体重.kt
package com.example.mytablayout
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import android.widget.Button
import com.example.mytablayout.fragments.TimePickerFragment
import java.util.*
lateinit var btnTime:Button
class Weight : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_weight, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val c = Calendar.getInstance()
val hour = c.get(Calendar.HOUR)
val minute = c.get(Calendar.MINUTE)
btnTime = view.findViewById(R.id.btnTime)
var btnTimeText = hour.toString() + ':' + minute.toString()
btnTime.setText(btnTimeText)
btnTime.setOnClickListener {
val newTimeFragment = TimePickerFragment()
newTimeFragment.show(childFragmentManager, "timePicker")
}
}
}
这是我的TimePickerFragment.kt
package com.example.mytablayout.fragments
import android.app.TimePickerDialog
import android.app.Dialog
import android.os.Bundle
import android.text.format.DateFormat
import android.widget.TimePicker
import androidx.fragment.app.DialogFragment
import java.util.*
class TimePickerFragment: DialogFragment(), TimePickerDialog.OnTimeSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val hour = c.get(Calendar.HOUR)
val minute = c.get(Calendar.MINUTE)
val dView = TimePickerDialog(requireActivity(), this, hour, minute, DateFormat.is24HourFormat(activity))
return dView
}
override fun onTimeSet(view: TimePicker, hour: Int, minute: Int) {
// Do something with the date chosen by the user
}
}
解决方案
我已阅读有关 viewModel 或使用接口的信息,但我无法在我的代码中真正实现它们。
您是否阅读了有关与片段通信的文档?
https://developer.android.com/guide/fragments/communicate#pass-parent-child
推荐阅读
- python - 从 sqlite 迁移到 postgres (django) 时如何更新单元测试
- database - 维度模型中的事实表实际上是事件表吗?
- node.js - Node / Express CORS POST 给出 504 和 403
- ios - 将 UITableViewCell 类中的 Selector 添加到 UITableViewController 类
- javascript - Javascript window.open(通过扩展)没有访问错误
- c# - 关闭父窗口时如何关闭子窗口?(WPF)
- java - JHipster AuthorizedFeignClient 动态名称
- symfony - 注意:未定义的变量:eventDispatcher?
- javascript - 分组数组并获取计数
- apache-kafka - 如何截断 KTable