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

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

简介

主要会通过安卓实战来讲解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())
  }

}

AI 代码解读
语法点1:MutableList
lateinit var mFragments: MutableList<Fragment>
AI 代码解读

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
    }
AI 代码解读

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

语法点3:属性的使用

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

viewPager.offscreenPageLimit = 4
AI 代码解读

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

语法点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
      }
AI 代码解读

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

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

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


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

kotlin实战交流群群二维码.png
目录
打赏
0
0
0
0
20
分享
相关文章
探索安卓开发的未来:Kotlin语言的崛起与挑战
在这篇文章中,我们将深入探讨Kotlin语言在安卓开发领域的应用及其对传统Java开发的颠覆性影响。通过分析Kotlin的特性、社区支持以及在实际项目中的应用案例,我们揭示了这一现代编程语言如何为开发者提供更简洁、更安全的编程体验,并讨论了它在面对性能优化和向后兼容性时所面临的挑战。文章旨在为读者呈现一个全面的视角,评估Kotlin作为未来安卓开发主流语言的可能性。
92 1
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
123 6
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
44 3
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
44 3
|
6月前
|
Kotlin 在公司上网监控中的安卓开发应用
在数字化办公环境中,公司对员工上网行为的监控日益重要。Kotlin 作为一种基于 JVM 的编程语言,具备简洁、安全、高效的特性,已成为安卓开发的首选语言之一。通过网络请求拦截,Kotlin 可实现网址监控、访问时间记录等功能,满足公司上网监控需求。其简洁性有助于快速构建强大的监控应用,并便于后续维护与扩展。因此,Kotlin 在安卓上网监控应用开发中展现出广阔前景。
45 1
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
91 4
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
38 0
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
203 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
108 6
探索安卓应用开发的新趋势:Kotlin和Jetpack Compose
在安卓应用开发领域,随着技术的不断进步,新的编程语言和框架层出不穷。Kotlin作为一种现代的编程语言,因其简洁性和高效性正逐渐取代Java成为安卓开发的首选语言。同时,Jetpack Compose作为一个新的UI工具包,提供了一种声明式的UI设计方法,使得界面编写更加直观和灵活。本文将深入探讨Kotlin和Jetpack Compose的特点、优势以及如何结合使用它们来构建现代化的安卓应用。
153 4

热门文章

最新文章

  • 1
    如何利用Java和Kotlin实现动态网页内容抓取
    10
  • 2
    使用Kotlin实现动态代理池的多线程爬虫
    20
  • 3
    kotlin 使用let与run结合,等价于if 与else
    18
  • 4
    Android历史版本与APK文件结构
    12
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    21
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    15
  • 7
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    2
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    3
  • 9
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    3
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    2
  • 1
    android FragmentManager 删除所有Fragment 重建
    18
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    30
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    35
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    42
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    142
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    46
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    58
  • 8
    Android历史版本与APK文件结构
    160
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    41
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等