android training

코틀린-안드로이드 정리

paulaner80 2021. 6. 10. 00:48
반응형

1. 뷰 바인딩

 

뷰바인딩

   기능활성화 

         모듈 gradle 에  view bind true 설정 

더보기

        

android {

    ...

    buildFeatures {

        viewBinding true

    }

}

   작명 규칙

         activity_main.xml -> ActivityMainBinding

   바인딩 클래스 파일

         build/generated/data_binding_base_class_source_out 디렉토리에 생성

   장점 

        Null 안정성

        타입안정성

        아이디 변경도 쉬움.. (refactory를 사용하면 한방에 kt, xml 파일 모두 수정 가능)

  xml 파일 찾는 법

        private lateinit var binding : ActivityMainBinding   에서

        ActivityMainBinding 부분 컨트롤 + 클릭 하면 이동함..

   임포트

         중요한것은 아닌데 조금 헤맸었음

         import com.example.myapplication.databinding.ActivityMainBinding

   액티비티에서 사용

       1.  Inflate 메소드를 사용해서 사용할 바인딩 클래스의 인스턴스를 생성

       2. setContentView() 에 최상위  뷰의 인스턴스를 넘겨줌

             setContentView(bind.root)

        3. 예제

더보기

               

class MainActivity : AppCompatActivity() {

    // 액티비티에서 사용할 레이아웃의 뷰 바인딩 클래스
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 뷰 바인딩 클래스의 인스턴스를 생성합니다.
        binding = ActivityMainBinding.inflate(layoutInflater)
        
        // 생성된 뷰를 액티비티에 표시합니다.
        setContentView(binding.root)
    }
}

    프래그먼트에서 사용

         1. 액티비티와 비슷

         2. onCreateView() 메서드의 반환 값으로 최상위뷰 인스턴스를 넘겨줍니다.

         3. 예제

더보기

   

class SecondFragment : Fragment() {

    private var _binding: FragmentSecondBinding? = null;

    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentSecondBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

 

 

[전체소스]

[1. kt]

더보기
package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater);
        setContentView(binding.root)


        binding.button.setOnClickListener{
            var input1 : String = binding.input1.text.toString()

            binding.output1.text = input1
        }
    }
}

[2.xml]

더보기
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/input1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="56dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="44dp"
        android:text="적용"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/input1" />

    <TextView
        android:id="@+id/output_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="56dp"
        android:text="이름 : "
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

가변인자
fun suma(vararg inputs:Int):Int{
    var output = 0
    for(num in inputs){
        output += num
    }
    return output
}


람다식
중괄호로 감싼다. { .. }
인자와 본문은 ->로 구분한다.
인자는 ()로 감싸지 않는다.
인자는 형식추론이 가능하므로 타입을 생략할 수 있다.
변수에 람다식을 담는경우에는 인자의 타입을 생략할 수 없다.

 

 

 

 

adb를 사용하여 버그 신고 캡처
$ adb bugreport E:\Reports\MyBugReports

 

'android training' 카테고리의 다른 글

ContextCompat  (0) 2021.05.18
안드로이드 폴더경로  (1) 2021.05.18
안드로이드스튜디오 단축키  (0) 2016.03.14