마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

intent 활용하여 화면전환 및 id 관련 질문드립니다.

0 추천

안녕하세요. 안드로이드를 이제 막 배우기 시작해서 미숙하다보니 진행이 잘 안되서 질문드립니다.

 

뷰바인딩 intent 활용해서 메인 액티비티에서 서브 액티비티로 화면 전환 및 값을 전달하려합니다.

하지만 서브 액티비티에서 id가 인식이 안될뿐더러 화면전환 및 값 전달이 안됩니다 ㅠㅠ

실행 시 버튼을 클릭하면 SubActivity로 넘어가지 않고 MainActivity만 새로고침되는 것처럼 됩니다.

TextView를 하단 코드와 같이 tvSubTest1, tvSubTest2 로 각각 id를 설정해놨으나 이는 인식이 안되고 메인 액티비티에 있는 뷰들의 id만 인식이 됩니다.

초보다 보니 인터넷에 예제를 찾아보고 해보는 편인데 예제와 똑같이 해도 전환이 안되서 질문드립니다..

 

<MainActivity.kt>

package com.test.test1107

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.daelim.test1107.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

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

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

        val mainIntent = Intent(this, SubActivity::class.java)

        mainIntent.putExtra("from1", "Hello Greedy")
        mainIntent.putExtra("from2", 2022)

        binding.btnMain.setOnClickListener {
            startActivity(mainIntent)
        }
    }
}

 

<SubActivity.kt>

package com.test.test1107

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.daelim.test1107.databinding.ActivityMainBinding

class SubActivity : AppCompatActivity() {

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

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

        binding.tvSubTest1.text = intent.getStringExtra("from1")
        binding.tvSubTest2.text = "${intent.getStringExtra("from2", 0)}"
    }
}

 

 

 

 

114be (120 포인트) 님이 2022년 11월 7일 질문
114be님이 2022년 11월 7일 수정

1개의 답변

0 추천

두화면 모두 AcvittyMainBinding을 사용하고 계시네요. 화면전환은 되었는데, 두화면이 같은 레이아웃을 사용해서 전환이 안될 걸로 보이는 건 아닌지 모르겠네요.

그리고 MainActivity에서 SubActivity를 호출하는 부분이 아래처럼 관련코드를 button click 안으로 올겨 주시면 좋을 것 같아요.
 

binding.btnMain.setOnClickListener {
    val intent = Intent(this, SubActivity::class.java)
    intent.putExtra("from1", "Hello Greedy")
    intent.putExtra("from2", 2022)
    startActivity(intent)
}

 

아무래도 SubActivity에 다른 레이아웃을 사용하시려고 했는데, 실수로 MainActivity의 레이아웃을 사용하신 것 같네요. 레이아웃을 맞게 설정하시면 해결될 듯 합니다.

spark (227,470 포인트) 님이 2022년 11월 8일 답변
문제 해결과 호출 부분의 코드 조언도 감사합니다. 덕분에 해결됐어요. 많은 도움이 됐습니다! :)
...