[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")
}