#Android开发之kotlin实现(体验)

xiaoxiao2021-02-28  113

Android开发之kotlin实现(体验)

虽然工作很久了但是第一次写博客,每次动手去写东西感觉自己要表述的东西网上一搜有好多(可能几篇东西凑到以前满足自己的需要),最近从Google大会了解到kotlin语言也感觉它的发展很有市场,看了官方的文档自己感觉可以试试这门语言,所以自己写了一个小的demo试试它,其中包含可Android中的基本用法,闲话不说直接开整:

- 环境的搭建

3.0以下的Android Studio版本(3.0自带kotlin插件)

目前只探索了Android Studio上使用,其实Android Studio也是基于kotlin语言开发团队开发的IDE上完善的软件开发工具 1.需要安装kotlin语言的插件File——>settings——>plugins——>搜索框中输入Kotlin——>搜索——>然后安装——>关闭重启(重启完就可以开始开发了)

- 开始我们的安卓项目

创建项目(和平常我们创建项目一样就可以了)

修改配置:创建完项目还要一点点小小的配置才能使用kotlin语言语言开发

1.项目根目录下的build.gradle 文件中添加 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4" (1.1.2-4为kotlin版本号) 如下: dependencies { classpath 'com.android.tools.build:gradle:2.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4" } 2.app目录下的build.gradle 文件中添加 apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' 和compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 添加地方如下图:

到这来我们对与kotlin的相关配置完成就可以进行代码的写了。

- 案例代码实现

MainActivity代码实现如下 import android.content.Context import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.view.View import com.project.lp.kotlindemo.Time.VerticalTimeLineActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() ,View.OnClickListener { private var mContext: Context? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mContext = this //kotlin中可以直接用不用findViewById() 但是使用是需要导入import kotlinx.android.synthetic.main.activity_main.* btn_time_line.setOnClickListener(this) } override fun onClick(v: View) { // TODO Auto-generated method stub /** * kotlin中的when语句和java比较像但是他必须有else(像java中的default) * 但是这个else必须有除非是枚举类型可以不用 * kotlin中的when必须是所有类型都包括 所有非枚举类型就必须要else分支 */ when (v.id) { R.id.btn_time_line -> { //声明一个变量 intent = Intent(mContext, VerticalTimeLineActivity::class.java) startActivity(intent) } else -> { } } } VerticalTimeLineActivity代码实现如下 import android.app.Activity import android.os.Bundle import android.widget.ListView import com.project.lp.kotlindemo.R import java.util.* /** * 横向的进度显示 * @author Administrator */ class VerticalTimeLineActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { // TODO Auto-generated method stub super.onCreate(savedInstanceState) setContentView(R.layout.vertical_time_line_activity) //声明变量 as后面是数据的类型 kotlin语言是可以省略";"号的 val listView = this.findViewById(R.id.listview) as ListView listView.dividerHeight = 0 val timelineAdapter = TimelineAdapter(data, this) listView.adapter= timelineAdapter } private val data: List<Schedule> get() { val list = ArrayList<Schedule>() //kotlin语言中的循环 0..9给的是i的范围 for (i in 0..9) { val schedule = Schedule() schedule.context = "测试数据" + i val dt = Date() val time = dt.time + i * 10000 schedule.Time = time list.add(schedule) } return list } } Adapter代码实现如下(之前写的一个demo直接搬过来的) /** *baseAdpter */ abstract class MyBaseAdapter<T>(protected var list: List<T>?, protected var context: Context) : BaseAdapter() { override fun getCount(): Int { // 重要: if (list != null && list!!.size > 0) { return list!!.size } else { return 0 } } override fun getItem(position: Int): T { return list!![position] } override fun getItemId(position: Int): Long { return position.toLong() } } import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import com.project.lp.kotlindemo.MyBaseAdapter import com.project.lp.kotlindemo.R import java.text.SimpleDateFormat import java.util.* /** *具体实现功能的Adpter */ class TimelineAdapter @SuppressLint("SimpleDateFormat") constructor(list: List<Schedule>, context: Context) : MyBaseAdapter<Schedule>(list, context) { private val sdf: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd hh:mm:ss") override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { var view : View // TODO Auto-generated method stub //感觉和java一样不 var viewHolder: ViewHolder? = null if (convertView == null) { val inflater = LayoutInflater.from(parent.context) view = inflater.inflate(R.layout.listview_item, null) }else { view = convertView } viewHolder = ViewHolder.getHolder(view) val titleStr = super.list!![position].context if (position == 0) { viewHolder.view_top_line.setBackgroundColor(Color .parseColor("#00000000")) } else { viewHolder.view_top_line.setBackgroundColor(Color .parseColor("#A6A6A6")) } if (null != super.list && super.list!!.size > 0 && position == super.list!!.size - 1) { viewHolder.view_bottom_line.setBackgroundColor(Color .parseColor("#00000000")) } else { viewHolder.view_bottom_line.setBackgroundColor(Color .parseColor("#A6A6A6")) } viewHolder.title.text = titleStr viewHolder.tv_time.text = sdf.format(Date(super.list!![position].Time)) return view } internal class ViewHolder(convertView: View) { var view_top_line: View var view_bottom_line: View var title: TextView var tv_time: TextView init { view_top_line = convertView.findViewById(R.id.view_top_line) as View view_bottom_line = convertView .findViewById(R.id.view_bottom_line) as View title = convertView.findViewById(R.id.title) as TextView tv_time = convertView.findViewById(R.id.tv_time) as TextView } companion object { fun getHolder(convertView: View): ViewHolder { var holder: ViewHolder? = null //判空操作 if(null != convertView.tag){ //没有判空操作直接强转是如果为空就会类型错误 holder = convertView.tag as ViewHolder } if (holder == null) { holder = ViewHolder(convertView) convertView.tag = holder } return holder } } } }

第一次技术文档写希望对您有用,也希望您题出宝贵的建议

中文官网

demo下载连接

转载请注明原文地址: https://www.6miu.com/read-17983.html

最新回复(0)