我正在尝试为我的朋友制作一个应用程序,这个错误不会消失。我需要在3月6日之前完成应用程序,如果我不修复此错误并完成剩下的工作,我将无法完成。此外,如果有办法使nav_view不是特定的nav_,而是每个nav_。所以我可以从nav_donate跳转到nav_prayers或nav_donate到nav_events。
错误位于页面底部
package com.naifcenter.mohammad.naifcenter
import android.app.FragmentManager
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.design.widget.NavigationView
import android.support.v4.view.GravityCompat
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_home_page.*
import kotlinx.android.synthetic.main.app_bar_home_page.*
class HomePage : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home_page)
setSupportActionBar(toolbar)
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
val toggle = ActionBarDrawerToggle(
this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
nav_view.setNavigationItemSelectedListener(this)
}
override fun onBackPressed() {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.home_page, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_settings -> return true
else -> return super.onOptionsItemSelected(item)
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
android.app.FragmentManager fragmentManager = getFragmentManager();
when (item.itemId) {
R.id.nav_prayer_rug -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new prayertime())
.commit()
}
R.id.nav_calendar -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new calendar())
.commit()
}
R.id.nav_donate -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new donate())
.commit()
}
R.id.nav_projects -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new projects())
.commit()
}
R.id.nav_social_media -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new socialmedia ())
.commit()
}
R.id.nav_bugs -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new bugs())
.commit()
}
R.id.nav_share -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new share())
.commit()
}
R.id.nav_send -> {
fragmentManager.beginTransaction()
.replace(R.id.nav_view
,new contact())
.commit()
}
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
}
当前错误是分类器'FragmentManager'没有伴随对象,因此必须在此初始化(第61行)
未解决的参考:新的(第66,74,80,86,92,98,104,110行)
你几乎混合java和kotlin,这导致一些语法相关的错误。
如果你想要替换一个片段,只需在你的活动中在kotlin中定义这个函数
fun FragmentManager.replaceFragment(containerId: Int, fragment: Fragment) {
beginTransaction().replace(containerId, fragment).commit()
}
现在你可以调用这个扩展函数来从任何地方替换片段
fragmentManager.replaceFragment(R.id.flContainer, PrayerTime())