在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 transaction
, fragment
variables的值仍然是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) } } } } }
谢谢!
- 一个简单的kotlin类与mockito测试引起MissingMethodInvocationException
- 使用Kotlin自定义Android视图
- 仅在AppBarLayout完全展开时启用SwipeRefreshLayout
- java.lang.VerifyError在Kotlin中编写Android测试的特性
- Kotlin静态function:伴随对象,@JvmStatic @JvmField
- 服务正在创建mediaplayer的新实例
- Kotlin / Android应用程序使用Retrofit2。 JSON查询不能按我期望的那样工作
- Gradle 3.0.0(在Android Studio 3.0中)重新排列任务序列(用Kotlin模块编译时)?
- 无法find方法’com.android.build.gradle.api.BaseVariant.getOutputs()Ljava / util / List;’