首页 > 解决方案 > 如何正确使用 Kotlin 从 Home 片段中调用空白片段?

问题描述

class HomeFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        val v = inflater.inflate(R.layout.fragment_home, container, false)

        val fab = v.findViewById(R.id.fab) as FloatingActionButton
        fab.setOnClickListener {
            val blankFragment = BlankFragment()
            val manager = childFragmentManager
            manager.beginTransaction().replace(R.id.frame_container, blankFragment, blankFragment.tag).commit()

           // System.out.println("You have reached the floating action button")
        }
        return v
    }
}

出现未找到视图错误。我可能对 R.id.frame_content 有疑问,但 Kotlin 不会立即识别所有 id 值......

标签: androidkotlin

解决方案


这可能不是最好的方法,我为我在手机上回答时所做的可怕格式道歉,而且很难让它完美。无论如何在包含您的片段的活动中,例如 MainActivity.kt 添加...

supportFragmentManager.beginTransaction.add(R.id.fragment_home, HomeFragment.newInstance, "HomeFragment").commit()

在您的 HomeFragment.kt 中更改以下内容。

class HomeFragment: Fragment(){
companion object { 
fun newInstance(): HomeFragment{
return HomeFragment() }

fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater!!.inflate(R.layout.fragment_home, container, false)
val activity = activity 
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val clickListener = View.OnClickListener { view ->
when (view.getId()) {
 R.id.fab -> NextFragment()
 }
 }
 fab.setOnClickListener(clickListener)
 }
 NextFragment(){
 val fragManager = activity?.supportFragmentManager
 fragManager?.beginTransaction()?.replace(R.id.frame_container, BlankFragment.newInstance(), "blankFragment")?.commit()
}

确保对 BlankFragment.kt 进行相同的更改

class BlankFragment: Fragment(){
companion object {
fun newInstance(): BlankFragment{
return BlankFragment() }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater!!.inflate(R.layout.fragment_blank, container, false)
val activity = activity
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//Do some stuff with your views in BlankFragment here
}
}

推荐阅读