我有一个导航抽屉,在使用kotlin在android中切换片段时遇到问题。没有出现错误消息,但我猜这个代码的安静问题:
private fun selectItemDrawer(menuItem: MenuItem){
var fragment:Fragment? = null
var fragmentClass:Class<*> = when(menuItem.itemId)
{
R.id.first-> FirstFragment::class.java
R.id.second-> SecondFragment::class.java
R.id.third-> ThirdFragment::class.java
R.id.fourth-> FourthFragment::class.java
else -> FirstFragment::class.java
}
try {
fragment = fragmentClass.newInstance() as Fragment
}catch (e:Exception){
e.printStackTrace()
}
var fragmentManager = supportFragmentManager
fragmentManager.beginTransaction()
.replace(R.id.frame,fragment)
.commit()
menuItem.isChecked = true
menuItem.title
drawer_layout.closeDrawers()
}
请有人帮忙吗?
答案 0 :(得分:3)
您在声明后从未修改var fragment
值,因此,当您尝试fragment transaction
时,fragment
变量值仍然是null
,它将无效。
在您的代码示例中,您应该执行以下操作:
try {
fragment = fragmentClass.newInstance() as Fragment //set fragment var with selected case
}catch (e:Exception){
e.printStackTrace()
}
修改:因为问题代码更新。
只需直接从fragment
声明中设置switch
值:
private fun selectItemDrawer(menuItem: MenuItem) {
var fragment: Fragment = when (menuItem.itemId) {
R.id.first -> FirstFragment()
R.id.second -> SecondFragment()
R.id.third -> ThirdFragment()
R.id.fourth -> FourthFragment()
else -> FirstFragment()
}
var fragmentManager = supportFragmentManager
fragmentManager
.beginTransaction()
.replace(R.id.frame, fragment)
.commit()
menuItem.isChecked = true
menuItem.title
drawer_layout.closeDrawers()
}
答案 1 :(得分:0)
您可以从此处下载完整的源代码(Navigation Drawer In Android Kotlin) class MainActivity:AppCompatActivity(),View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
init()
}
private fun init() {
tv_home.setText("Home Tab")
tv_title.setText("Home")
ll_about.setOnClickListener(this)
ll_home.setOnClickListener(this)
ll_bookmark.setOnClickListener(this)
ll_help.setOnClickListener(this)
rl_menu.setOnClickListener(this)
rl_header.setOnClickListener(this)
tv_link.setLinkTextColor(Color.parseColor("#000000"));
Linkify.addLinks(tv_link, Linkify.ALL)
}
override fun onBackPressed() {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
override fun onClick(p0: View?) {
when (p0?.id) {
R.id.ll_home -> {
drawer_layout.closeDrawer(GravityCompat.START)
tv_home.setText("Home Tab")
tv_title.setText("Home")
}
R.id.ll_about -> {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("http://deepshikhapuri.blogspot.in/"))
startActivity(browserIntent)
}
R.id.ll_help -> {
drawer_layout.closeDrawer(GravityCompat.START)
tv_home.setText("Help Tab")
tv_title.setText("Help")
}
R.id.ll_bookmark -> {
drawer_layout.closeDrawer(GravityCompat.START)
tv_home.setText("Bookmark Tab")
tv_title.setText("Bookmark")
}
R.id.rl_header -> {
}
R.id.rl_menu -> {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else {
drawer_layout.openDrawer(GravityCompat.START)
}
}
}
}
}
谢谢!