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

 

startActivityForResult는 왜 deprecated 되었는가?

1. startActivityForResult 2. onActivityResult 3. 왜 deprecated 되었는가? 1. startActivityForResult 예전에는 호출한 액티비티로부터 결과를 받아오기 위해 startActivityForResult를 사용했다. 하지만 2020..

todaycode.tistory.com

 

아래블로그에 매우 잘 정리되어있다.

그러므로 나는 어떻게 대체하는가를 기술하려한다.

 

우선 오늘 내가 해볼것은 ActivityResultContracts 를 통한 갤러리 불러오기이다.

 

앱 수준에서 데이터 바인딩을 위해 수정을 좀 해주고.

 

대충 이미지뷰와 버튼 하나 만들어준다.

뷰 바인딩을 위해 layout 추가 해주는거 잊지말길

기존에 startActivityForresult와 onAcitivtyResult를 대체하는 방법이다.

 

 

코드 자체는 매우매우 단순하고 쉽다.

 


 

결과

참고

https://developer.android.com/training/basics/intents/result?hl=ko 

 

 

활동에서 결과 가져오기  |  Android 개발자  |  Android Developers

활동에서 결과 가져오기 개발자 앱 내의 활동이든 다른 앱의 활동이든 다른 활동을 시작하는 것이 단방향 작업일 필요는 없습니다. 다른 활동을 시작하고 다시 결과를 받을 수도 있습니다. 예를

developer.android.com

 

+ Recent posts