DBILITY

안드로이드 activity 간 데이터 보내고 받기 본문

android

안드로이드 activity 간 데이터 보내고 받기

DBILITY 2024. 2. 22. 12:51
반응형

build.gradle.kts에서 viewBinding을 다음과 같이 활성화

buildFeatures {
    viewBinding = true
}

onActivityResult는 Deprecated되었다.registerForActivityResult를 사용해야 하는데 Activity 실행(?)에는  ActivityResultContracts.StartActivityForResult()를 사용한다.물론 callback은 lambda로

class MainActivity : AppCompatActivity() {

    private val binding by lazy {
        ActivityMainBinding.inflate(layoutInflater)
    }

    private val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS",Locale.getDefault())

    private val resultLauncher =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult(),) { result ->
            if (result.resultCode == Activity.RESULT_OK) {
                val param = result.data?.getStringExtra("param")?:"None"
                Log.d("StartActivityForResult",param)
                binding.activityMainTextView.text = param
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        binding.run {
            activityMainButton.setOnClickListener {
                val intent = Intent(this@MainActivity,SubActivity::class.java).apply { 
                    putExtra("param","호출자가 넘겨준 시간 : ${formatter.format(System.currentTimeMillis())}")
                }
                resultLauncher.launch(intent)
            }
        }
    }

}
class SubActivity : AppCompatActivity() {

    private val binding by lazy {
        ActivitySubBinding.inflate(layoutInflater)
    }

    private val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS",Locale.getDefault())

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

        binding.run {
            activitySubTextView.text = intent.getStringExtra("param")
            activitySubButton.setOnClickListener {
                intent.putExtra("param", "피호출자가 넘겨준 시간 : ${formatter.format(System.currentTimeMillis())}")
                setResult(Activity.RESULT_OK, intent)
                finish()
            }
        }
    }
}

반응형
Comments