5.kotlin安卓实践课程-用kotlin写第一个activity(具体实现)


简介

主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。

针对人群:Android中级以上,kotlin入门


接上一篇

MainActivity完整代码,这个类主要完成了viewpager+fragment这种经典结构的绑定和底部导航栏点击事件处理

class MainActivity : BaseBindingActivity<ActivityMainBinding>(),RandomContract.View {

//语法点1: MutableList
  lateinit var mFragments: MutableList<Fragment>
  @Inject lateinit var mPresenter : RandomPresenter
  override fun createDataBinding(savedInstanceState: Bundle?): ActivityMainBinding {
    return DataBindingUtil.setContentView(this, R.layout.activity_main)
  }

  override fun initView() {
    initFragments()
    getMainComponent().plus(RandomModule(this)).inject(this)
    viewPager.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
      override fun getItem(position: Int) = mFragments[position]
      override fun getCount() = mFragments.size
    }

    viewPager.offscreenPageLimit = 4

    navigationView.setOnNavigationItemSelectedListener { item ->
      var tab = 0
      when (item.itemId) {
        R.id.menu_android -> tab = 0
        R.id.menu_ios -> tab = 1
        R.id.menu_girl -> tab = 2
        R.id.menu_about -> tab = 3
      }
      viewPager.currentItem = tab
      false
    }


    floatingButton.setOnClickListener {
      mPresenter.getRandom("Android")
    }

  }
  override fun onRandom(goods :FuckGoods) {

    val url = URLEncoder.encode(goods.url)
    toast("手气不错~")

    GankRouter.router(this,GankClientUri.DETAIL + url)
  }
  private fun initFragments() {
    mFragments = ArrayList()
    mFragments.add(AndroidFragment.newInstance())
    mFragments.add(IOSFragment.newInstance())
    mFragments.add(GirlFragment.newInstance())
    mFragments.add(FragmentHolder())
  }

}

语法点1:MutableList
lateinit var mFragments: MutableList<Fragment>

MutableList<E>接口继承于List<E>,MutableCollection<E>,是对只读集合的扩展,增加了了对集合的添加及删除元素的操作。kotlin也有List但是它不同于java的List,kotlin的List只有只读属性,就是可以查询但不能增删改

语法点2:匿名对象
viewPager.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
      override fun getItem(position: Int) = mFragments[position]
      override fun getCount() = mFragments.size
    }

这里的object就是匿名对象和java的一样,注意一下kotlin的实现形式

语法点3:属性的使用

大家可能注意到了,viewPager.adapter我们java里面都是要调用setAdapter的,这里其实用编辑器点击adapter你会发现,其实kotlin会自动调用这个方法 ,所以kotlin要使用一个属性,只需要使用名称引用即可

viewPager.offscreenPageLimit = 4

这样的属性使用的例子随处可见

语法点4:when函数
 when (item.itemId) {
        R.id.menu_android -> tab = 0
        R.id.menu_ios -> tab = 1
        R.id.menu_girl -> tab = 2
        R.id.menu_about -> tab = 3
      }

when是表达式,所以它能够返回存储到变量里的值,它更强大的应用可以看看下面的代码

 val res = when {
     x in 1..10 -> "cheap"
     s.contains("hello") -> "it's a welcome!"
     v is ViewGroup -> "child count: ${v.getChildCount()}"
     else -> ""
 }

when条件左边可以做任何很多事,因为它是表达式,比传统的switch强太多


欢迎一起交流,有问题加群交流

kotlin实战交流群群二维码.png
上一篇:1.kotlin安卓实践课程-构建application


下一篇:《MATLAB图像处理375例》——1.3 MATLAB概述