Kotlin Android Extensions는 Kotlin 팀에서 개발 한 플러그인으로, 개발 프로세스에서 코드를 적게 작성할 수 있도록하는 것이 목적입니다. 현재 뷰 바인딩 기능이 포함되어 있습니다.
여러 바인딩보기 방법 비교 **
xml 파일은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:gravity="center"
>
<Button
android:id="@+id/btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
/>
</LinearLayout>
첫 번째는 뷰를 바인딩하는 전통적인 방법입니다 (findViewById).
private lateinit var mLoginBtn:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mLoginBtn = findViewById(R.id.btn_login) as Button
mLoginBtn.setOnClickListener {
Toast.makeText(this@MainActivity,"登录",Toast.LENGTH_SHORT).show()
}
}
이런 식으로 정상적인 상황에서 뷰를 수신 할 멤버 변수를 정의하고 동시에 findViewById를 사용하고 유형 변환을 수행합니다.
두 번째 유형, 프레임 주석 바인딩보기 (ButterKnife)
/*
引入编译插件和依赖包。略过...
*/
@BindView(R.id.btn_login)
lateinit var mLoginBtn:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ButterKnife.bind(this)
mLoginBtn.setOnClickListener {
Toast.makeText(this@MainActivity,"登录",Toast.LENGTH_SHORT).show()
}
}
ButterKnife를 사용하면 컴파일 된 플러그인과 라이브러리 파일을 도입해야 할뿐만 아니라 뷰를 바인딩하는 과정에서 멤버 변수를 정의해야하며 코드 양이 줄어들지 않았 음을 알 수 있습니다.
세 번째 유형은 플러그인 바인딩 뷰 (Kotlin-Android-Extensions of JetBrains)입니다.
1) 모듈의 build.gradle 파일에 플러그인 구성 추가
apply plugin: 'kotlin-android-extensions'
2)보기를 바인딩해야하는 Activity, Fragment, Adapter 및 사용자 지정보기에 리소스 파일을 소개합니다.
import kotlinx.android.synthetic.main.activity_main.*
3) 사용 장소에서 xml의 해당 ID를 직접 사용하여 뷰에 액세스하면 전체 코드는 다음과 같습니다.
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_login.setOnClickListener {
Toast.makeText(this@MainActivity,"登录",Toast.LENGTH_SHORT).show()
}
}
}
소개 파일에 대한 자세한 설명
import kotlinx.android.synthetic.main.activity_main.*
고정 접두사 : import kotlinx.android.synthetic.main
레이아웃 파일 이름 : activity_main
가져올보기 : ""는 레이아웃 아래의 모든보기를 가져 오는 것을 의미합니다. 물론 필요한보기 만 가져 와서 다음과 같이 해당 ID로 바꿀 수도 있습니다.
import kotlinx.android.synthetic.main.activity_main.btn_login
어댑터 및 사용자 정의보기에 도입되었으며 다음과 같이 레이아웃 파일 이름 뒤에보기 노드를 추가해야합니다.
import kotlinx.android.synthetic.main.view_login.view.*
Kotlin 플러그인 바인딩보기 범위
활동에서 사용하고, 리소스 파일을 가져오고, ID를 직접 사용하여보기에 액세스합니다.
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_login.setOnClickListener {
Toast.makeText(this@MainActivity,"登录",Toast.LENGTH_SHORT).show()
}
}
}
Fragment에서 사용하고, 리소스 파일을 가져오고, ID를 직접 사용하여 뷰에 액세스합니다. 특별한 참고 사항이 있습니다. 뷰가로드되지 않았기 때문에 onCreateView에서 뷰에 직접 액세스하지 않습니다. 널 포인터가 발생하기 쉽습니다. onViewCreated에서보기에 액세스해야하는 경우 코드는 다음과 같습니다.
import kotlinx.android.synthetic.main.view_login.*
class LoginFragment:Fragment() {
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater?.inflate(R.layout.view_login, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn_login.setOnClickListener {
Toast.makeText(context,"登录", Toast.LENGTH_SHORT).show()
}
}
}
어댑터에서 사용, 가져 오기 레이아웃 파일은 뷰 노드를 추가해야합니다. ViewHolder의 itemView를 사용하여 뷰에 직접 액세스 할 수 있습니다 (물론 기존 ViewHolder와 유사한 ViewHolder에서 뷰 바인딩을 수행 할 수도 있음). 코드는 다음과 같습니다.
import kotlinx.android.synthetic.main.view_login.view.*
class LoginAdapter(var context: Context):RecyclerView.Adapter<LoginAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context)
.inflate(R.layout.view_login,parent,false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.btn_login.setOnClickListener {
Toast.makeText(context,"登录", Toast.LENGTH_SHORT).show()
}
}
override fun getItemCount(): Int {
return 3
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
}
사용자 정의보기에서 사용하려면 레이아웃 파일을 가져 오기 위해보기 노드를 추가해야합니다. 사용자 정의보기에서는 ID를 직접 사용하여보기에 액세스 할 수 있습니다. 코드는 다음과 같습니다.
import kotlinx.android.synthetic.main.view_login.view.*
class LoginView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
init {
View.inflate(context,R.layout.view_login,this)
btn_login.setOnClickListener {
Toast.makeText(context,"登录", Toast.LENGTH_SHORT).show()
}
}
}
네 번째, Google의 viewBinding
레퍼런스 선택 방법 : ButterKnife의 종결자는 누구입니까? ViewBinding 및 Kotlin-android-extension 선택
전송 위치 : Kotlin Android 확장 프로그램 사용자 가이드