【问题标题】:Fragment in kotlinkotlin 中的片段
【发布时间】:2017-11-12 12:35:07
【问题描述】:

我被困在我的应用程序中,因为我必须在 kotlin 中使用导航抽屉做一个片段。有人可以帮忙吗?我在网上搜索了很多东西,但我还没有找到任何东西...... 下面是我在主要活动中所做的两个项目,我希望它也存在于片段中。

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    // Handle navigation view item clicks here.
    when (item.itemId) {
        R.id.home -> {

        }
        R.id.subjects -> {
            val intent = Intent(this, SubjectsActivity::class.java)
            startActivity(intent)
        }
    }

    drawer_layout.closeDrawer(GravityCompat.START)
    return true
}

【问题讨论】:

  • 片段驻留在 Activity 中,因此如果您在 Activity 中有导航抽屉,它也会在片段中,考虑到该 Activity 拥有该片段
  • 所以我可以添加一个带有导航抽屉的新活动并将它们作为片段放置?
  • 使用导航抽屉创建一个 Activity 并向该 Activity 添加一个 Fragment,它应该可以工作。
  • class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener
  • MainActivity 是否包含导航抽屉?如果是,是的

标签: android android-studio android-fragments kotlin


【解决方案1】:

你可以从这里下载源链接(Navigation Drawer In Android Kotlin)

MainActivity.kt:

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


        }

    }

谢谢!

【讨论】:

    【解决方案2】:

    你可以用它来用 HomeFragment() 替换你的框架 mainDisplayFrame 应替换为您的 FrameID

    var fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(R.id.mainDisplayFrame,HomeFragment()).commit()
    mDrawerLayout!!.closeDrawers()
    

    【讨论】:

      【解决方案3】:

      是这样的吗? @NongthonbamTonthoi

      class NavViewFragment : AppCompatActivity(), 
      NavigationView.OnNavigationItemSelectedListener {
      
      fun AppCompatActivity.addFragment(fragment: Fragment, frameId: Int){
          supportFragmentManager.inTransaction { add(frameId, fragment) }
      }
      
      
      
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          setContentView(R.layout.activity_nav_view_fragment)
          setSupportActionBar(toolbar)
      
          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 {
          // Inflate the menu; this adds items to the action bar if it is present.
          menuInflater.inflate(R.menu.nav_view, menu)
          return true
      }
      
      override fun onOptionsItemSelected(item: MenuItem): Boolean {
          // Handle action bar item clicks here. The action bar will
          // automatically handle clicks on the Home/Up button, so long
          // as you specify a parent activity in AndroidManifest.xml.
          when (item.itemId) {
              R.id.action_settings -> return true
              else -> return super.onOptionsItemSelected(item)
          }
      }
      
      override fun onNavigationItemSelected(item: MenuItem): Boolean {
          // Handle navigation view item clicks here.
          when (item.itemId) {
              R.id.home -> {
      
              }
              R.id.subjects -> {
                  val intent = Intent(this, SubjectsActivity::class.java)
                  startActivity(intent)
              }
      
              }
          drawer_layout.closeDrawer(GravityCompat.START)
          return true
          }
      inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> Unit) {
          val fragmentTransaction = beginTransaction()
          fragmentTransaction.func()
          fragmentTransaction.commit()
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2019-03-07
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        • 1970-01-01
        • 2018-01-04
        • 2022-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多