android - Kotlin 接口,在两个分片之间发送数据
问题描述
我希望通过我的 Main Activity (自动打开)FragmentA
通过FragmentDialog
接口发送一个字符串。一些代码来说明我所拥有的:Communicator
FragmentDialog
class FragmentA: Fragment() {
private lateinit var communicator: Communicator
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_A, container, false)
val title = "My Title"
button.setOnClickListener { communicator.passData(title) }
return view
}
}
class FragmentDialog : DialogFragment() {
var title: String? = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.dialog, container, false)
view.button_close.setOnClickListener { dismiss() }
title = arguments?.getString("title")
view.dialog_title.text = title
return view
}
}
interface Communicator {
fun passData (titleInput: String)
}
在我的主要活动中,它扩展了界面:
private val fragmentDialog = FragmentDialog()
override fun passData(titleInput: String) {
val bundle = Bundle()
bundle.putString("title", titleInput)
fullScreenDialog.arguments = bundle
val transaction = supportFragmentManager.beginTransaction().add(android.R.id.content, fragmentDialog).addToBackStack(null).commit()
}
当我单击button
in 时FragmentA
,我想将字符串发送title
到,使用 id inCommunicator
设置 XML 元素并自动打开片段。事实上,这很好用。问题是我的“后退按钮” ,即只工作一次。如果我再次单击,仍然可以正常打开正确的标题,但不再关闭对话框。这可能是什么原因造成的?我没有收到任何控制台错误。dialog_title
FragmentDialog
FragmentDialog
view.button_close.setOnClickListener { dismiss() }
button
FragmentA
FragmentDialog
button_close
解决方案
推荐阅读
- python - 如何让熊猫像 MS Excel 一样使用单元格算术?
- mysql - 计算特定范围和条件的天数
- typescript - 如何在 http 请求后 typescript/angular 7 中在 HttpParams 中传递布尔值
- php - 通过表单连接 SQL 和 PHP/HTML 的问题
- angular - Angular CLI 错误:找不到项目定义
- php - 从自定义路径获取 PHP 配置
- java - 为什么我使用 Docker 会出现 OOM?
- jquery - 当使用 Datepicker (jalali) 选择日期时,文档不会改变
- http - 如何检查 URL 是否存在
- android - 为 WorkManager 测试 RxWorker