首页 > 解决方案 > Kotlin 接口,在两个分片之间发送数据

问题描述

我希望通过我的 Main Activity (自动打开)FragmentA通过FragmentDialog接口发送一个字符串。一些代码来说明我所拥有的:CommunicatorFragmentDialog

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()
}

当我单击buttonin 时FragmentA,我想将字符串发送title到,使用 id inCommunicator设置 XML 元素并自动打开片段。事实上,这很好用。问题是我的“后退按钮” ,即只工作一次。如果我再次单击,仍然可以正常打开正确的标题,但不再关闭对话框。这可能是什么原因造成的?我没有收到任何控制台错误。dialog_titleFragmentDialogFragmentDialogview.button_close.setOnClickListener { dismiss() }buttonFragmentAFragmentDialogbutton_close

标签: androidkotlin

解决方案


推荐阅读