在Kotlin中的片段类之间切换

我有一个导航的抽屉,并在Android与KOTLIN切换片段有问题。 没有错误消息出现,但我猜这个代码和平的问题:

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() } 

任何人都可以帮助这个请!

声明后,您从来没有修改过var fragment值,所以当您尝试一个fragment transactionfragmentvariables的值仍然是null并且不起作用。

在你的代码示例中,你应该做如下的事情:

 try { fragment = fragmentClass.newInstance() as Fragment //set fragment var with selected case }catch (e:Exception){ e.printStackTrace() } 

编辑:由于问题代码更新。

只需从您的switch语句直接设置您的fragment值:

 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() } 

您可以从这里下载完整的源代码( 在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) } } } } } 

谢谢!