java에서 kotlin으로 넘어오면서 한번 해야겠다는 생각이 있었는데 드디어 정리해본다.
mainActivity.kt
package com.example.gallery
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.databinding.DataBindingUtil
import com.example.gallery.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
val image = registerForActivityResult(
ActivityResultContracts.GetContent(),
ActivityResultCallback {
binding.imageArea.setImageURI(it)
}
)
binding.pickimage.setOnClickListener {
image.launch("image/*")
}
}
}
acitivitymain.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageArea"
android:layout_width="match_parent"
android:layout_height="100dp">
</ImageView>
<Button
android:id="@+id/pickimage"
android:text="선택"
android:textSize="20sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</Button>
</LinearLayout>
</layout>
StartActivityForResult가 deprecated 되었는데 그 이유는
https://todaycode.tistory.com/121
아래블로그에 매우 잘 정리되어있다.
그러므로 나는 어떻게 대체하는가를 기술하려한다.
우선 오늘 내가 해볼것은 ActivityResultContracts 를 통한 갤러리 불러오기이다.
앱 수준에서 데이터 바인딩을 위해 수정을 좀 해주고.
대충 이미지뷰와 버튼 하나 만들어준다.
기존에 startActivityForresult와 onAcitivtyResult를 대체하는 방법이다.
코드 자체는 매우매우 단순하고 쉽다.
참고
https://developer.android.com/training/basics/intents/result?hl=ko
'프로그래밍 > 안드로이드' 카테고리의 다른 글
리사이클러뷰 - 안드로이드 (0) | 2022.08.22 |
---|---|
다중 이미지 가져오기 - 안드로이드 (0) | 2022.08.08 |
안드로이드 - onclick (0) | 2022.05.17 |
안드로이드 - Preperence (0) | 2022.05.11 |
안드로이드 - 파일의 생성(문자열 저장), 읽기, 삭제 (0) | 2022.05.11 |