[android] Kotlin Android에서 새 활동 시작

Android에서 다른 활동을 시작하고 싶지만이 오류가 발생합니다.

생성자 호출을 지정하십시오. 분류 자 ‘Page2’에 컴패니언 개체가 없습니다.

Intent클래스를 인스턴스화 한 후 . 오류를 수정하려면 어떻게해야합니까? 내 코드 :

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun buTestUpdateText2 (view: View) {
        val changePage = Intent(this, Page2) 
        // Error: "Please specify constructor invocation; 
        // classifier 'Page2' does not have a companion object"

        startActivity(changePage)
    }

}



답변

Activity우리가 작성한 자바에서 를 시작하려면 Intent(this, Page2.class)기본적으로 Context첫 번째 매개 변수와 두 번째 매개 변수의 대상 클래스 를 정의해야합니다 . 에 따라 Intent소스 코드의 방법 –

 public Intent(Context packageContext, Class<?> cls)

보시다시피 Class<?>두 번째 매개 변수에 유형 을 전달해야 합니다.

작성함으로써 Intent(this, Page2)우리는 클래스를 전달할 것임을 지정 class하지 않으며 허용되지 않는 유형 을 전달하려고합니다 .

kotlin의 ::class.java대안을 사용하십시오 .class. 아래 코드를 사용하여Activity

Intent(this, Page2::class.java)

예 –

val intent = Intent(this, NextActivity::class.java)
// To pass any data to next activity
intent.putExtra("keyIdentifier", value)
// start your next activity
startActivity(intent)


답변

이 간단한 방법을 사용하여 시작하면 Activity됩니다 KOTLIN.

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", value)
startActivity(intent)


답변

새 활동을 시작하려면

startActivity(Intent(this@CurrentClassName,RequiredClassName::class.java)

따라서 코드를 다음과 같이 변경하십시오.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun buTestUpdateText2 (view: View) {
        startActivity(Intent(this@MainActivity,ClassName::class.java))

        // Also like this 

        val intent = Intent(this@MainActivity,ClassName::class.java)
        startActivity(intent)
    }


답변

일반적으로 BlahActivity::class.java인라인 수정 된 일반 함수를 정의 하여 매개 변수 사양을 단순화 할 수 있습니다 .

inline fun <reified T: Activity> Context.createIntent() =
    Intent(this, T::class.java)

당신이 할 수 있기 때문에

startActivity(createIntent<Page2>()) 

또는 더 간단

inline fun <reified T: Activity> Activity.startActivity() {
    startActivity(createIntent<T>()) 
} 

그래서 지금

startActivity<Page2>() 


답변

클래스 유형의 두 번째 인수를 제공해야합니다. 아래와 같이 좀 더 깔끔하게 할 수도 있습니다.

startActivity(Intent(this, Page2::class.java).apply {
    putExtra("extra_1", value1)
    putExtra("extra_2", value2)
    putExtra("extra_3", value3)
})


답변

이 시도

val intent = Intent(this, Page2::class.java)
startActivity(intent)


답변

이것은 텍스트 편집 및 의도 설정에서 사용자 이름과 비밀번호를 가져 오는 주요 활동입니다.

class MainActivity : AppCompatActivity() {
val userName = null
val password = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
    val intent = Intent(this@MainActivity,SecondActivity::class.java);
    var userName = username.text.toString()
    var password = password_field.text.toString()
    intent.putExtra("Username", userName)
    intent.putExtra("Password", password)
    startActivity(intent);
 }
}

이것은 주요 활동에서 가치를 받아야하는 두 번째 활동입니다.

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
var strUser: String = intent.getStringExtra("Username")
var strPassword: String = intent.getStringExtra("Password")
user_name.setText("Seelan")
passwor_print.setText("Seelan")
}