Android 如何在框架布局中插入片段布局
我第一次尝试使用Kotlin创建一个Android应用程序,并尝试在用户单击导航图标时使用不同的片段布局,而不让它们与我的底部导航栏重叠。我创建了一个FrameLayout,旨在将片段布局放在其中,但不清楚如何编写代码来实现这一点 这是我的MainActivity.kt,它现在覆盖导航条:Android 如何在框架布局中插入片段布局,android,kotlin,Android,Kotlin,我第一次尝试使用Kotlin创建一个Android应用程序,并尝试在用户单击导航图标时使用不同的片段布局,而不让它们与我的底部导航栏重叠。我创建了一个FrameLayout,旨在将片段布局放在其中,但不清楚如何编写代码来实现这一点 这是我的MainActivity.kt,它现在覆盖导航条: private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { i
private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
setContentView(R.layout.fragment_home)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_favorites -> {
setContentView(R.layout.fragment_favorite)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_calculator -> {
setContentView(R.layout.fragment_calculator)
return@OnNavigationItemSelectedListener true
}
}
false
}
这是我的框架布局:
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above= "@id/nav_view">
</FrameLayout>
当选择导航栏上的选项卡时,您希望导航到相应的片段。你就是这样做的 假设我们有一个MainActivity,它有3个选项卡:“Tab1”、“Tab2”、“Tab3” MainActivity将有两个XML布局:导航栏和框架布局。 然后,您需要创建3个新片段(每个片段也有自己的XML布局)。选择适当的导航栏选项卡时,这3个片段将查看framelayout 例如: 主要活动XML
<FrameLayout
android:id="@+id/mainFragment"
android:layout_width="match_parent"
android:background="#ffffff"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_nav"
android:text="@string/title_home" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
app:menu="@menu/bottom_navigation" />
主要活动KOTLIN
class MainActivity : AppCompatActivity() {
private lateinit var manager: FragmentManager
private lateinit var transaction: FragmentTransaction
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_tab1 -> {
title = "Tab1"
manager = supportFragmentManager
transaction = manager.beginTransaction()
transaction.replace(R.id.mainFragment, Tab1Fragment())
transaction.addToBackStack(null)
transaction.commit()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_tab2 -> {
title = "Tab2"
manager = supportFragmentManager
transaction = manager.beginTransaction()
transaction.replace(R.id.mainFragment, Tab2Fragment())
transaction.addToBackStack(null)
transaction.commit()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_tab3 -> {
title = "Tab 3"
manager = supportFragmentManager
transaction = manager.beginTransaction()
transaction.replace(R.id.mainFragment, Tab3Fragment())
transaction.addToBackStack(null)
transaction.commit()
return@OnNavigationItemSelectedListener true
}
}
false
}
@SuppressLint("CommitTransaction")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigation = findViewById<View>(R.id.bottom_nav) as BottomNavigationView
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
class MainActivity:AppCompatActivity(){
私有lateinit变量管理器:FragmentManager
私有lateinit var事务:FragmentTransaction
private val mOnNavigationItemSelectedListener=BottomNavigationView.OnNavigationItemSelectedListener{item->
时间(item.itemId){
R.id.navigation_tab1->{
title=“Tab1”
manager=supportFragmentManager
事务=manager.beginTransaction()
transaction.replace(R.id.mainFragment,Tab1Fragment())
transaction.addToBackStack(空)
commit()事务
return@OnNavigationItemSelectedListener真的
}
R.id.navigation_tab2->{
title=“Tab2”
manager=supportFragmentManager
事务=manager.beginTransaction()
transaction.replace(R.id.mainFragment,Tab2Fragment())
transaction.addToBackStack(空)
commit()事务
return@OnNavigationItemSelectedListener真的
}
R.id.navigation_tab3->{
title=“表3”
manager=supportFragmentManager
事务=manager.beginTransaction()
transaction.replace(R.id.mainFragment,Tab3Fragment())
transaction.addToBackStack(空)
commit()事务
return@OnNavigationItemSelectedListener真的
}
}
假的
}
@SuppressLint(“提交交易”)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigation=findViewById(R.id.bottom_nav)作为BottomNavigationView
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
当选择导航栏上的选项卡时,您希望导航到相应的片段。你就是这样做的
假设我们有一个MainActivity,它有3个选项卡:“Tab1”、“Tab2”、“Tab3”
MainActivity将有两个XML布局:导航栏和框架布局。
然后,您需要创建3个新片段(每个片段也有自己的XML布局)。选择适当的导航栏选项卡时,这3个片段将查看framelayout
例如:
主要活动XML
<FrameLayout
android:id="@+id/mainFragment"
android:layout_width="match_parent"
android:background="#ffffff"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_nav"
android:text="@string/title_home" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
app:menu="@menu/bottom_navigation" />
主要活动KOTLIN
class MainActivity : AppCompatActivity() {
private lateinit var manager: FragmentManager
private lateinit var transaction: FragmentTransaction
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_tab1 -> {
title = "Tab1"
manager = supportFragmentManager
transaction = manager.beginTransaction()
transaction.replace(R.id.mainFragment, Tab1Fragment())
transaction.addToBackStack(null)
transaction.commit()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_tab2 -> {
title = "Tab2"
manager = supportFragmentManager
transaction = manager.beginTransaction()
transaction.replace(R.id.mainFragment, Tab2Fragment())
transaction.addToBackStack(null)
transaction.commit()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_tab3 -> {
title = "Tab 3"
manager = supportFragmentManager
transaction = manager.beginTransaction()
transaction.replace(R.id.mainFragment, Tab3Fragment())
transaction.addToBackStack(null)
transaction.commit()
return@OnNavigationItemSelectedListener true
}
}
false
}
@SuppressLint("CommitTransaction")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigation = findViewById<View>(R.id.bottom_nav) as BottomNavigationView
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
class MainActivity:AppCompatActivity(){
私有lateinit变量管理器:FragmentManager
私有lateinit var事务:FragmentTransaction
private val mOnNavigationItemSelectedListener=BottomNavigationView.OnNavigationItemSelectedListener{item->
时间(item.itemId){
R.id.navigation_tab1->{
title=“Tab1”
manager=supportFragmentManager
事务=manager.beginTransaction()
transaction.replace(R.id.mainFragment,Tab1Fragment())
transaction.addToBackStack(空)
commit()事务
return@OnNavigationItemSelectedListener真的
}
R.id.navigation_tab2->{
title=“Tab2”
manager=supportFragmentManager
事务=manager.beginTransaction()
transaction.replace(R.id.mainFragment,Tab2Fragment())
transaction.addToBackStack(空)
commit()事务
return@OnNavigationItemSelectedListener真的
}
R.id.navigation_tab3->{
title=“表3”
manager=supportFragmentManager
事务=manager.beginTransaction()
transaction.replace(R.id.mainFragment,Tab3Fragment())
transaction.addToBackStack(空)
commit()事务
return@OnNavigationItemSelectedListener真的
}
}
假的
}
@SuppressLint(“提交交易”)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigation=findViewById(R.id.bottom_nav)作为BottomNavigationView
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
请参考非常好的知识来源:
基本上,您需要创建链接中提到的事务:
val transaction = supportFragmentManager.beginTransaction().apply {
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
replace(R.id.fragment_container, newFragment)
addToBackStack(null)
transaction.commit()
}
因此,在你的情况下:
when (item.itemId) {
var fragment: Fragment
R.id.navigation_home -> {
fragment = HomeFragment()
}
.
.
.
val transaction = supportFragmentManager.beginTransaction().apply {
replace(R.id.fragment_container, fragment)
addToBackStack(null)
transaction.commit()
您也可以使用add
而不是replace
请参阅本帖以确定使用哪种方法:
请参考非常好的知识来源: 基本上,您需要创建链接中提到的事务:
val transaction = supportFragmentManager.beginTransaction().apply {
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
replace(R.id.fragment_container, newFragment)
addToBackStack(null)
transaction.commit()
}
因此,在你的情况下:
when (item.itemId) {
var fragment: Fragment
R.id.navigation_home -> {
fragment = HomeFragment()
}
.
.
.
val transaction = supportFragmentManager.beginTransaction().apply {
replace(R.id.fragment_container, fragment)
addToBackStack(null)
transaction.commit()
您也可以使用add
而不是replace
请参阅本帖以确定使用哪种方法: