Kotlin Android 확장 프로그램 사용자 가이드

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 확장 프로그램 사용자 가이드

추천

출처blog.csdn.net/nongminkouhao/article/details/108225906