在Kotlin中切换片段类

时间:2018-01-09 16:26:44

标签: android android-fragments kotlin navigation-drawer

我有一个导航抽屉,在使用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()
}

请有人帮忙吗?

2 个答案:

答案 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)
                }
            }


        }

    }

}

谢谢!