【发布时间】:2019-08-23 05:28:16
【问题描述】:
我正在尝试将当前使用 android 导航组件的设置切换为使用经典片段管理器,因为导航组件给了我很多无法解决的限制。
我遇到了一个问题,当我开始交易以在我的框架布局中显示一个片段时,突然他的底部导航和工具栏不再显示。 我尝试了不同的方法,但找不到解决此问题的原因。
这是我的活动布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FeedActivity"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="50dp"
android:theme="@style/MyActionBar"
android:minHeight="?attr/actionBarSize"
android:id="@+id/my_toolbar"/>
<include
layout="@layout/content_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/feed_bottom_nav"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="?android:attr/windowBackground"
app:itemBackground="@color/white"
app:itemTextColor="@color/bottom_nav_color"
app:itemIconTint="@color/bottom_nav_color"
app:menu="@menu/navigation"
app:labelVisibilityMode="unlabeled"/>
</LinearLayout>
这是我包含的 content_main 的布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="FeedActivity"
app:layout_behavior=""
tools:showIn="@layout/activity_feed"
android:padding="1dp"
android:id="@+id/feed_frame_container">
</FrameLayout>
这是我的活动课:
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.Menu
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import co.getdere.Fragments.FeedFragment
import co.getdere.Fragments.ImageFullSizeFragment
import co.getdere.Fragments.ProfileRandomUserFragment
import co.getdere.Models.Images
import co.getdere.Models.Users
import co.getdere.RegisterLogin.RegisterActivity
import co.getdere.ViewModels.SharedViewModelCurrentUser
import co.getdere.ViewModels.SharedViewModelImage
import co.getdere.ViewModels.SharedViewModelRandomUser
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.FirebaseApp
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
class FeedActivity : AppCompatActivity() {
lateinit var mToolbar: Toolbar
lateinit var mBottomNav: BottomNavigationView
var imageFullSizeFragment = ImageFullSizeFragment()
var feedFragment = FeedFragment()
var randomProfileNavHostFragment = ProfileRandomUserFragment()
val fm = supportFragmentManager
var active = feedFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_feed)
FirebaseApp.initializeApp(this)
checkIfLoggedIn()
mToolbar = findViewById(R.id.my_toolbar)
setSupportActionBar(mToolbar)
mBottomNav = findViewById(co.getdere.R.id.feed_bottom_nav)
mBottomNav.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
co.getdere.R.id.destination_board -> {
val intent = Intent(this, BoardActivity::class.java)
startActivity(intent)
}
R.id.destination_profile_logged_in_user -> {
val intent = Intent(this, ProfileActivity::class.java)
startActivity(intent)
}
R.id.destination_feed -> {
val intent = Intent(this, ProfileActivity::class.java)
startActivity(intent)
}
}
false
}
fm.beginTransaction().add(R.id.feed_frame_container, imageFullSizeFragment, "imageFullSizeFragment").hide(imageFullSizeFragment).commit()
fm.beginTransaction().add(R.id.feed_frame_container, randomProfileNavHostFragment, "randomProfileNavHostFragment").hide(randomProfileNavHostFragment).commit()
fm.beginTransaction().add(R.id.feed_frame_container, feedFragment, "feedFragment").commit()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(co.getdere.R.menu.feed_navigation, menu)
return super.onCreateOptionsMenu(menu)
}
private fun checkIfLoggedIn() {
val uid = FirebaseAuth.getInstance().uid
if (uid == null) {
val intent = Intent(this, RegisterActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
} else {
fetchCurrentUser()
}
}
private fun fetchCurrentUser() {
val uid = FirebaseAuth.getInstance().uid
val ref = FirebaseDatabase.getInstance().getReference("/users/$uid/profile")
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
sharedViewModelCurrentUser.currentUserObject = p0.getValue(Users::class.java)!!
Log.d("checkLocation", "fetchCurrentUser")
}
})
}
companion object {
fun newInstance(): FeedActivity = FeedActivity()
}
}
如果我现在运行应用程序,框架布局内的片段会占据整个屏幕,但如果我删除这些行:
fm.beginTransaction().add(R.id.feed_frame_container, imageFullSizeFragment, "imageFullSizeFragment").hide(imageFullSizeFragment).commit()
fm.beginTransaction().add(R.id.feed_frame_container, randomProfileNavHostFragment, "randomProfileNavHostFragment").hide(randomProfileNavHostFragment).commit()
fm.beginTransaction().add(R.id.feed_frame_container, feedFragment, "feedFragment").commit()
我可以再次看到顶部栏和底部导航。有什么想法吗?
【问题讨论】:
标签: android android-fragments android-framelayout bottomnavigationview fragmentmanager