如何正确使用Kotlin从Home片段中调用空白片段?

时间:2018-10-15 00:20:22

标签: android kotlin

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值...

1 个答案:

答案 0 :(得分:0)

这可能不是最好的方法,对于在手机上接听电话时出现的可怕格式,我深表歉意,但很难做到完美。无论如何,在保存片段的活动中,例如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
}
}