👉關于作者
眾所周知,人生是一個漫長的流程,不斷克服困難,不斷反思前進的程序,在這個程序中會產生很多對于人生的質疑和思考,于是我決定將自己的思考,經驗和故事全部分享出來,以此尋找共鳴 !!!
專注于Android/Unity和各種游戲開發技巧,以及各種資源分享(網站、工具、素材、原始碼、游戲等)
有什么需要歡迎私我,交流群讓學習不再孤單,
👉前提
前面我們學了Kotlin語言,趁熱打鐵我們試試Kotlin在Android中的應用,
如果是新手,請先學完Android基礎,
推薦先看小空之前寫的熬夜Android系列,再來嘗試,

👉實踐程序
😜方式一
使用擴展,如果你第一次創建專案的時候選擇的是Kotlin語言,則默認帶有該插件,如果選擇的默認是Java語言,則需要手動添加,
該方式的優點就是對編程人員來說可以直接拿到View的id,不需要定義變數和findViewById,
在專案的build檔案開頭添加【app->build.gradle】
apply plugin: ‘kotlin-android-extensions’

之后在Activity中添加import,固定格式的,
import kotlinx.android.synthetic.main.修改為你的布局名稱.*
【*】代表的是該布局下的所有控制元件,如果只需要指定控制元件,將【*】改為控制元件名即可,如下示例
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.mytextview
之后就可以直接在代碼中使用控制元件的id來進行回應操作了,
<TextView
android:id="@+id/myText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="芝麻粒兒和空名先生"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
但是方便的同時,問題的隱患也存在著,在底層仍然回歸原始使用的是findViewById,所以會對性能有影響,
😜方式二
使用findViewById,這個仍然有兩種方式,方式一是【lateinit】關鍵字,但是存在坑,詳情看這(在 Kotlin 代碼中慎用 lateinit 屬性https://zhuanlan.zhihu.com/p/31297995 )
推薦方式二使用【lazy】,如下:
private val myText: TextView by lazy { findViewById<TextView>(R.id.myText) }
private val myImg: ImageView by lazy { findViewById<ImageView>(R.id.myImg) }
private val imageView: ImageView by lazy { findViewById<ImageView>(R.id.imageView) }
private val myBtn: Button by lazy { findViewById<Button>(R.id.myBtn) }
上面是在Activity中的使用,而在Fragment中又怎么用呢?
class LoginFragment : Fragment() {
private var myText: TextView? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
//設定布局
return inflater.inflate(R.layout.login_fragment, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
myText = view.findViewById(R.id.myText)
myText?.setText("動態修改文本")
}
}
除了上面的寫法,Android官方給了我們更好的解決方案:
class LoginFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
//設定布局
return inflater.inflate(R.layout.login_fragment, container, false)
}
private lateinit var myText: TextView
private lateinit var myImg: ImageView
private lateinit var imageView: ImageView
private lateinit var myBtn: Button
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//查找view
myText = view.findViewById(R.id.myText)
myImg = view.findViewById(R.id.myImg)
imageView = view.findViewById(R.id.imageView)
myBtn = view.findViewById(R.id.myBtn)
}
}
還有另外方式就是使用自動化插件,在【File-Setting-Plugins】市場搜索關鍵字【findview】,看最新的幾個,挑選自己用的順手的使用即可,
👉其他
📢作者:小空和小芝中的小空
📢轉載說明-務必注明來源:https://zhima.blog.csdn.net/
📢歡迎點贊👍收藏🌟留言📝
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/332126.html
標籤:其他
