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)
其他答案都可以,但我们仍然可以通过使用 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
这是您通过单击另一个片段内的按钮转到片段或活动的示例:
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)
| 归档时间: |
|
| 查看次数: |
26052 次 |
| 最近记录: |