如何更改 Fragment Kotlin

Man*_*nda 5 android fragment android-fragments kotlin

我从 Kotling 开始,我不知道如何在片段之间进行更改,我尝试过以下代码:

val manager = supportFragmentManager
    val transaction = manager.beginTransaction()
    transaction.add(R.layout.fragment_information.toInt(), ComplainFragment())
    transaction.commit()
Run Code Online (Sandbox Code Playgroud)

R.layout.fragment_information.toInt()

但是我对这个参数有一个错误,因为它没有找到片段 ID。

小智 10

我通常使用替换在片段之间进行更改。也只将 R.layout.fragment_information 更改为 R.id.fragment_layout_id,所以不需要 toInt()

transaction.replace(R.id.fragment_layout_id, fragment)
Run Code Online (Sandbox Code Playgroud)

这是我的建议。

    var fragment: Fragment? = null

            when (itemId) {
                        R.id.fragment_information -> {
                            fragment = ComplainFragment()
                        }
            }

            if (fragment != null) {
                    val transaction = supportFragmentManager.beginTransaction()
                    transaction.replace(R.id.fragment_layout_id, fragment)
                    transaction.commit()
            }
Run Code Online (Sandbox Code Playgroud)


Nar*_*him 5

其他答案都可以,但我们仍然可以通过使用 Kotlin 中的扩展函数来改进很多。

向 FragmentManager 类添加扩展函数,如下所示,

inline fun FragmentManager.doTransaction(func: FragmentTransaction.() -> 
FragmentTransaction) {
    beginTransaction().func().commit()
}
Run Code Online (Sandbox Code Playgroud)

然后为 AppCompatActivity 类创建一个扩展函数,

fun AppCompatActivity.addFragment(frameId: Int, fragment: Fragment){
    supportFragmentManager.doTransaction { add(frameId, fragment) }
}


fun AppCompatActivity.replaceFragment(frameId: Int, fragment: Fragment) {
    supportFragmentManager.doTransaction{replace(frameId, fragment)}
}

fun AppCompatActivity.removeFragment(fragment: Fragment) {
    supportFragmentManager.doTransaction{remove(fragment)}
}
Run Code Online (Sandbox Code Playgroud)

现在,要从任何活动中添加和删除片段,您只需要像这样调用,

addFragment(R.id.fragment_container, fragment)

replaceFragment(R.id.fragment_container, fragment)
Run Code Online (Sandbox Code Playgroud)

请参阅以下链接了解更多信息,

https://medium.com/thoughts-overflow/how-to-add-a-fragment-in-kotlin-way-73203c5a450b


Tha*_*hật 5

这是您通过单击另一个片段内的按钮转到片段或活动的示例:

class Fragment_One: Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_one, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        btn_goToActivity2.setOnClickListener {
            val intent = Intent(context, SecondActivity::class.java)
            startActivity(intent)
        }

        btn_goToFragment2.setOnClickListener {
            var fr = getFragmentManager()?.beginTransaction()
            fr?.replace(R.id.fragment, Fragment_Two())
            fr?.commit()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)