技术标签: Kotlin
开场小絮叨:
kotlin被谷歌正式作为Android的一级开发语言已经好几个月了,一直想学习一下,一直没有时间(好吧,我承认是我懒)。最近买了本书啃,也算下定决心学习这门语言。学习新知识,首先你要知道它是什么它的历史和它的用途。它是针对Java平台的一种编程语言,在这我强调一下,kotlin并不是一门新的语言,它其实在11年就已经推出来了,只不过是在被谷歌认证为Android开发官方语言之后才被人们广泛流传。当然,也不要简单的认为它只能用来开发Android应用,它还可以用来开发服务端和其它的用武之地。对于这门语言,我只能说很强大,但是不会盲目追捧(好多文章已经把它捧上天了),适合自己的才是最好的。
学习一门语言,光看是不行的,还是得动手啊,毕竟实践是检验理论的唯一标准。作为程序员学习新语言的第一个程序都是hello world,但是你会感到兴奋吗,不会,因为这一步骤大多数IDE都会自动生成,其实和没写是一样的。所以今天我打算来实现一个简单的列表来体验一下kotlin。怎么配置环境我就不多说了,要么下载插件,要么下载最新版本的Android Studio。
首先我们先明确一下步骤
1.编写布局文件(很简单就一个ListView)
2.编写数据类(在这里我就用最常用的Person类吧 哈哈)
3.编写适配器
4.在Activity里面做一下处理(这里就简单的给ListView设置适配器和点击事件)
布局文件这和我们平常没什么区别就略过了,那么就从编写数据类开始吧
Person.kt
package com.demo.bean
class Person(name:String,age:Int,profile:String="这个人很懒还没有签名"){
var name:String=""
var age:Int=0
var profile:String?=null
init {
this.name=name
this.age=age
this.profile=profile
}
}
BasicAdapter.kt(抽取出来的一个抽象类)
package com.demo.adapter import android.content.Context import android.widget.BaseAdapter abstract class BasicAdapter<T>(context: Context?,list:ArrayList<T>?): BaseAdapter() { var listData:ArrayList<T>?=null var context:Context?=null init { this.listData=list this.context=context } override fun getItem(p0: Int): T? { return listData?.get(p0) } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listData?.size?:0 } /** * 获取数据集合 */ public fun getData():ArrayList<T>?{ return listData } /** * 移除某一项 */ public fun remove(position:Int){ listData?.removeAt(position) notifyDataSetChanged() } /** * 移除所有数据 */ public fun removeAll(){ listData?.clear() notifyDataSetChanged() } /** * 在某一个位置更新数据 */ public fun update(postion:Int,data:T){ listData?.add(postion,data) notifyDataSetChanged() } /** * 追加数据 */ public fun updateAllAppend(datas:ArrayList<T>){ listData?.addAll(datas) notifyDataSetChanged() } /** * 更新全部数据 */ public fun updateAll(datas: ArrayList<T>){ listData?.clear() listData?.addAll(datas) notifyDataSetChanged() } } MyAdapter.kt(具体实现类)
package com.demo.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import com.demo.bean.Person import com.zhangs.demo.firstkotlin.R class MyAdapter(context: Context?, list: ArrayList<Person>?) : BasicAdapter<Person>(context, list) { override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { var contentview = p1 var holder: MyAdapter.ViewHolder? = null if (contentview == null) { contentview = LayoutInflater.from(context).inflate(R.layout.layout_item_list, null) var tv_userName: TextView = contentview.findViewById(R.id.tv_username) var tv_age: TextView = contentview.findViewById(R.id.tv_age) var tv_profile: TextView = contentview.findViewById(R.id.tv_profile) holder = MyAdapter.ViewHolder(tv_userName, tv_age, tv_profile) contentview.setTag(holder) } else { holder = contentview.getTag() as MyAdapter.ViewHolder? } holder?.userName?.setText(listData?.get(p0)?.name) holder?.age?.setText(listData?.get(p0)?.age.toString()) holder?.profile?.setText(listData?.get(p0)?.profile) return contentview!! } }
语法可能看着有点陌生,但是我相信你肯定能看懂,这不就是原来我们一直重复写过的listview优化部分吗接下来我们就在Acitivity里面稍微处理一下,让页面显示出一个列表吧
MainActivity.kt
package com.demo.kotlin import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.widget.ListView import android.widget.Toast import com.demo.adapter.MyAdapter import com.demo.bean.Person import com.zhangs.demo.firstkotlin.R class MainActivity : AppCompatActivity() { var mListView: ListView? = null var data: ArrayList<Person>? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mListView=findViewById(R.id.listview) initData() var adater= MyAdapter(this,data); mListView?.adapter=adater //设置item的点击事件 mListView?.setOnItemClickListener { adapterView, view, i, l -> Toast.makeText(this,data?.get(i)?.name,Toast.LENGTH_SHORT).show() } } /** * 初始化数据 */ public fun initData(): Unit { data = arrayListOf(Person("张三", 21, "哈哈哈哈哈"), Person("李四", 21, "嘻嘻嘻嘻嘻嘻嘻"), Person("王五", 21), Person("赵六", 21, "嘿嘿嘿嘿嘿嘿嘿嘿嘿"), Person("张三疯", 21, "哈哈哈哈哈"), Person("张三四", 21, "哈哈哈哈哈")) } }
那么我们就来运行一下吧,效果如下:
当然运行出效果不是最重要的,主要是通过这个简单的例子,来体验一下,kotlin和java的区别,当然我这个例子完全是按java代码风格写的,假如有什么地方不合适的,希望斧正。
1.docker pull nginx2.docker images_1671465600
source:&nbsp;http://blog.csdn.net/yuexianchang/article/details/535833271:浏览器输入官网地址:http://spring.io/projects2:点击如图树叶页面按钮。&nbsp;3:点击如图小猫图片按钮。&nbsp;4:查找downloading&nbsp;spring&nbsp;artifact...
内容转载于:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html工作中经常使用 Git ,但是很多命令记不住,每次忘了总去百度查,于是自己直接转载过来。Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库# 在当前目录新建一个G...
提供指向HAL模块的回调函数指针,以将异步相机模块事件通知到框架。在初始的camera HAL模块加载之后,在get_number_of_cameras()方法第一次被调用之后,以及在任何其他模块调用之前,框架都会调用这个函数。函数及结构体typedef struct camera_module_callbacks { void (*camera_device_status_change)(const struct camera_module_callbacks*, .
当单服务器的负载超限时,通常会搭建集群服务或将系统拆分成分布式的结构。本章将讲解如何在多台服务器之间实现远程通信。1.OSI与TCP/IP网络模型1.1OSI七层模型物理层:用于原始信号(0,1)的传输。单位是比特。设备是中继器,集线器。数据链路层:通过MAC地址(全球唯一)在网络中定位目标计算机的位置,从而实现一个子网内的通信。传输的单位是Frame(帧)。主要设备是网卡,网桥,交换机。网络层:若多个设备在同一子网内,则通过数据链路层即可通信。若不在一个子网内,则需要通过网络层通信。网络层会在
本文介绍了OpenStack网络,该网络管理其他OpenStack项目之间的连接。 在不包含任何特定于网络的功能的情况下,有可能开发出一种可弹性伸缩的工作负载管理系统。 当然,计算节点将需要它们之间的连接性以及对外界的访问,但是有可能利用现有的网络基础结构来分配IP地址并在节点之间中继数据。 在多租户环境中,这种方法的最大问题在于,现有的网络管理系统将无法高效,安全地隔离用户之间的流量,这...
我们先从一道简单的问题说起! 设有一个1MB容量的存储器,字长32位,问:按字节编址,字编址的寻址范围以及各自的寻址范围大小? 如果按字节编址,则 1MB = 2^20B 1字节=1B=8bit 2^20B/1B = 2^20 ...
先展示一下使用环境:相关的指令:node -vnpm -vwebpack -vnode-sass -v 查看是否有已经安装的sass版本:卸载指令:npm uninstall --save node-sass执行安装sass相关的语句:npm i -D [email protected] i -D [email protected]安装后使用要在build/webpack.base.conf.js里添加配置:(注意逗号){test: /\.scss$/,loade
1 集群基本操作1.1 查看当前集群状态使用redis-trib.rb check功能查看对应的节点的状态:[[email protected] bin]# ./redis-trib.rb check 127.0.0.1:7000Connecting to node 127.0.0.1:7000: OKConnecting to node 127.0.0.1:7002: OKC...
1、计算机——右击——管理——用户——确定当前用户是内置的Administrator,并把它的禁用解除;2、控制面板——程序——打开或关闭Windows功能——勾选Microsoft Message Queue(MSMQ)服务器;3、双击程序进行安装;安装问题:Please restart Windows before installing new programs开始——运行——
VsCode jquery代码提示插件安装方法插件下载地址:http://en.ucbw123.com/jquerysnippets/5685安装步骤:打开VsCode,使用Ctrl+P,输入 ext install jquery code snippets ,搜索要安装的插件,点击安装按钮即可。
下载后解压文件,将里面的文件拷贝到/lib/security [Unix]/lib/security [Win32]覆盖原先的jar文件,请先备份原先的jar文件,以防你需要恢复密钥长度的限制,这里需要注意的是如果是安装的jdk,jdk目录中的jre下面的lib/security下的文件也需要覆盖。完成这个步骤之后就可以使用不限制密钥长度的aes算法了,简...