Kotlin android-freestyle

14226 단어 Kotlin
  • 1 구성
  • 2 실천
  • step1 페이지 디자인
  • step2 데이터베이스 디자인



  • 1. 구성

  • 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은 안드로이드 퀘스트 개발을 간소화하기 위해 대문자 확장 함수입니다
  • 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'
        }
    }

    2. 실천


    step1. 페이지 디자인

  • activity_layout.xml 생성, 평소와 같습니다
  • 
    <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 역시 별거 아니에요
  • 
    <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 사용자 정보 - 데이터 클래스
  • 데이터를 수식자로 한다
  • Json 해석 필드는 매개 변수 이름과 일치하고 Serialised도 서열화할 수 있습니다

  • data class UserInfo(val name: String, val age: Int)
  • MainRvAdapter.kt 어댑터 생성 및 목록 항목 표시는 다음과 같습니다.
  • 수조 수치는 통일적으로 채택한다.[index] 형식, 이전의 get 함수를 던져라

  • import android.support.v7.widget.RecyclerView
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import com.nuon.kj.MainRvAdapter.ViewHolder
    import kotlinx.android.synthetic.main.item_main.view.*
    
    class MainRvAdapter(val items: List, val itemClick: (UserInfo) -> Unit)
        : RecyclerView.Adapter() {
    
        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.Intent
    import android.os.Bundle
    import android.support.v7.app.AppCompatActivity
    import android.support.v7.widget.LinearLayoutManager
    import android.support.v7.widget.RecyclerView
    import com.nuon.kj.db.UserInfo
    import 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("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

    좋은 웹페이지 즐겨찾기