Kotlin android-freestyle
来源:互联网 发布:win7安装apache 编辑:程序博客网 时间:2024/05/22 06:46
- 一 配置
- 二 实践
- step1 页面设计
- step2 数据库设计
一、 配置
- Project/build.gradle 配置
buildscript { ext { support_version = '25.3.0' gradle_version = '2.3.0' kotlin_version = '1.1.2-3' anko_version = '0.8.2' } repositories { jcenter() dependencies { classpath 'com.android.tools.build:gradle:2.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } }}
- Model/build.gradle 配置
- kotlin-stdlib 为基础的依赖包
- anko-common 为简化 Android 任务开发,大写的扩展函数
- anko-sqlite 本地数据库
apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'dependencies { ... compile "com.android.support:appcompat-v7:$support_version" compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.anko:anko-common:$anko_version" compile "org.jetbrains.anko:anko-sqlite:$anko_version"}android{ sourceSets { // 提示:需手动创建 kotlin 目录 main.java.srcDirs += 'src/main/kotlin' }}
二、 实践
step1. 页面设计
- activity_layout.xml 创建,跟往常一样
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/main_rv" android:layout_width="match_parent" android:layout_height="match_parent"/></android.support.constraint.ConstraintLayout>
- item_main.xml 同样是没啥特别的
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/main_item_tv" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
- UserInfo.kt 用户信息-数据类
- data 作为修饰符
- Json 解析字段与参数名一致,也可 Serialised 实现序列化
data class UserInfo(val name: String, val age: Int)
- MainRvAdapter.kt 适配器创建与列表项展示,有如下改变:
- 数组取值统一采用 .[index] 形式,抛去以往的 get 函数
import android.support.v7.widget.RecyclerViewimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport com.nuon.kj.MainRvAdapter.ViewHolderimport kotlinx.android.synthetic.main.item_main.view.*class MainRvAdapter(val items: List<UserInfo>, val itemClick: (UserInfo) -> Unit) : RecyclerView.Adapter<ViewHolder>() { override fun getItemCount(): Int { return items.size } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { holder?.binData(items[position]) } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent?.context).inflate(R.layout.item_main, null) return ViewHolder(view, itemClick) } class ViewHolder(val view: View, val itemClick: (UserInfo) -> Unit) : RecyclerView.ViewHolder(view) { // val mNameTv: TextView = view.findViewById(R.id.main_item_tv) as TextView fun binData(info: UserInfo) { with(info) { // mNameTv.text = name // 这里通过 kotlin-android-extensions 提供的模板实现视图获取(id) view.main_item_tv.text = name view.main_item_tv.setTextColor(ContextCompat.getColor(view.context, R.color.colorAccent)) } view.setOnClickListener { itemClick.invoke(info) } } }}
- MainActivity.kt 创建与视图声明,有如下改变:
- 数组定义使用 listOf 函数实现其赋值
- 对象定义使用 var/val 命名,类型转换 as
- setLayoutManager() 由 set 函数更新为 .layoutManager 表示
- 对象的实例化省去 new 字串的编辑
import android.content.Intentimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.support.v7.widget.LinearLayoutManagerimport android.support.v7.widget.RecyclerViewimport com.nuon.kj.db.UserInfoimport org.jetbrains.anko.startActivitylass MainActivity : AppCompatActivity() { var mMainRv: RecyclerView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initView() } fun initView() { val user1 = UserInfo("Joke", 22) val user2 = UserInfo("Ming", 26) val user3 = user1.copy(name = "Tome")// 对象赋值 val userList = listOf(user1, user2, user3) val mMainRv = findViewById(R.id.main_rv) as RecyclerView// val mMainRv: RecyclerView = find(R.id.main_rv)// anko 简化实现 mMainRv.layoutManager = LinearLayoutManager(this) mMainRv.adapter = MainRvAdapter(userList) {// 扩展函数引用// Toast.makeText(this@MainActivity, it.name, Toast.LENGTH_SHORT).show()// val intent = Intent(MainActivity@this, DetailActivity::class.java)// intent.putExtra("userName", it.name)// startActivity(intent) startActivity<DetailActivity>("userName" to it.name)// anko 实现 } }}
step2 数据库设计
- UserTable.kt 创建表结构,用于存储账号信息
object UserTable { val TableName = "_user" val ID = "_id" val Pwd = "pwd" val UserName = "userName" val Age = "age" val Sex = "sex"}
- UserInfo.kt 创建表对象
data class UserInfo(val map: MutableMap<String, Any?>) { var _id: Long by map var loginId: String by map var pwd: String by map var userName: String by map var age: Int by map var sex: String by map constructor() : this(HashMap()) constructor(id: Long, loginId: String, pwd: String, userName: String, age: Int, sex: String) : this(HashMap()){ this._id = id this.loginId = loginId this.pwd = pwd this.userName = userName this.age = age this.sex = sex }}
待更新…
Kotlin self-freestyle
Kotlin java-freestyle
阅读全文
0 0
- Kotlin android-freestyle
- Kotlin self-freestyle
- Kotlin java-freestyle
- 使用CSS控制Android控件的样式--pixate-freestyle-android
- android:Kotlin Java Kotlin android Kotlin
- kotlin android
- kotlin-Android
- Android Kotlin
- kotlin+android
- < Kotlin > Kotlin Android Extensions (译文)
- Kotlin开发Android笔记10:Kotlin中Kotlin Android Extensions
- kotlin初窥之Kotlin Android Extensions
- Kotlin for Android(三)Kotlin数据类型
- Kotlin for Android(九)Kotlin集合
- Kotlin学习系列----Android Studio配置Kotlin
- Kotlin学习之kotlin-android-extensions
- 使用Kotlin开发Android
- Kotlin-Android的Swift
- RichTextBox控件操作
- hdu1421 搬寝室 DP
- ios 简单的使用系统邮箱发送邮件
- 出现 java.util.zip.ZipException: error in opening zip file 异常的原因及解决方法
- linux新加坡专有网络部署tomcat以后外部浏览器无法访问--专线网络安全组策略
- Kotlin android-freestyle
- macOS
- Git 忽略一些文件不加入版本控制
- 标签页示例
- H265帧类型
- 设置系统的当前时间
- SharedPreferencesUtil
- UVa1343
- ubuntu+idea+spark+scala,编译项目报错java.net.BindException: Cannot assign requested address