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强太多
欢迎一起交流,有问题加群交流

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
彻底理解Java中的基本数据类型转换(自动、强制、提升)
image 说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。 image 重新温故了下原始数据类型,现在来解释下它们之间的转换关系。 自动类型转换 自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。 如: long l = 100; int i = 200; long ll = i; 具体自动转换如如下图所示。 image 实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。 自动转换也要小心数据溢出问题,看下面的例子。 int count = 100000000; int price = 1999; long totalPrice = count * price; 编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。 int count = 100000000; int price = 1999; long totalPrice ...
-
下一篇
自制一个python下载文件的进度条模块!
我们在做Python爬虫脚本的时候,往往希望在运行的过程中可以实时查看到我的下载进度!之前我也一直想实现这个功能(绝对不是为了炫(装)耀(B)),也查看了很多博客但是各种解决方案都不是很满意(当然,progressBar和tqdm这两个库都是可选择也可操作的),很多时候我们需要一些定制功能的时候就需要考虑自己实现,这个功能其实很简单,我们可以自己去实现它! 实现办法 进度条最大的问题是实现输出在一行,且实时变化,不要换行。有的同学可能已经想到了,有2种办法: 一个是来自sys库的sys.stdout.write()函数 可以替代print的一个函数,具体的大家可以自行查找相关资料哦,我们今天用第二种办法: print本身就有可以实现的办法,比如下面的代码,大家可以运行下! import time for i in range(10): print('\r'+'>'*i,end='') 这段代码会生成一个缓缓前行的‘>’,是不是很简单。重点是’ ‘和end参数, 是跳到行开头,end=”是将原本的print完成后换行改为不换行,这样就实现了这个小功能 那么,进度条完成了,怎么...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音