kotlin学习笔记——Kotlin Android Extensions
Kotlin Android Extensions是另外一個團隊開發的,它是一個插件所以不需要依賴別的庫。當前僅僅包含view的綁定,會自動創建很多屬性讓我們直接訪問xml中的view,我們就不需要明確的去布局中找這些view了。
自動創建的屬性的名字來源于view的id,所以我們取id的時候要十分小心。這些屬性類型也是從xml中獲取的,所以不必再做類型轉換。
Kotlin Android Extensions具有緩存功能,避免每次使用屬性都重新獲取一次。但是緩存功能目前只在activity和fragment中有效,如果在擴展函數中則跳過緩存。
使用Kotlin Android Extensions
一、首先加入插件的依賴,在module中的build.gradle中(注意不是root下的):
buildscript {repositories {jcenter()}dependencies {classpath 'org.jetbrains.kotlin:kotlin-android-extensions:1.1.2-4'} }二、import進代碼中:
1、activity和fragment的Android Extensions
import kotlinx.android.synthetic.activity_main.*以kotlinx.android.synthetic開頭,activity_main是layout的名字(注意:新版本前面要加上main,既.main.activity_main.)。
當調用了setContentView之后就可以直接使用自動創建的view的屬性了。注意:如果在layout中使用include,那么必須將include的layout也import進來。
2、view的Android Extensions
有很多代碼需要訪問xml中的view,比如自定義view或者adapter。綁定一個view到另外一個view,這時需要import
如:
import kotlinx.android.synthetic.main.item_view.view.*class RecyclerAdaper(var items: List<String>, var listener: (String) -> Unit) : RecyclerView.Adapter<RecyclerAdaper.ViewHolder>(){override fun onBindViewHolder(holder: ViewHolder, position: Int) {holder.bind(items[position])}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {return ViewHolder(View.inflate(parent.context, R.layout.item_view, null))}override fun getItemCount(): Int {return items.size}class ViewHolder(view: View) : RecyclerView.ViewHolder(view){fun bind(str: String){itemView.nametext.text = str}}}注意import進來的不是layout了,而是layout.view,這樣就可以直接使用這個view的子view了。
三、直接在代碼中使用
如:
activity_main.layout
<?xml version="1.0" encoding="utf-8"?> <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerview"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></RelativeLayout>MainActivity.java
import kotlinx.android.synthetic.main.activity_main.*class MainActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//var recyclerview = findViewById(R.id.recyclerview) as RecyclerView//var recyclerview: RecyclerView = find(R.id.recyclerview)recyclerview.layoutManager = LinearLayoutManager(this)可以看到直接使用recyclerview這個變量,不必在使用find代碼,節省了大量的代碼
總結
以上是生活随笔為你收集整理的kotlin学习笔记——Kotlin Android Extensions的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin学习笔记——内联函数
- 下一篇: kotlin学习笔记——委托属性