Saya ingin memulai aktivitas lain di Android tetapi saya mendapatkan kesalahan ini:
Harap tentukan permintaan konstruktor; classifier 'Page2' tidak memiliki objek pendamping
setelah membuat instance Intent
kelas. Apa yang harus saya lakukan untuk memperbaiki kesalahan tersebut? Kode saya:
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)
}
}
android
kotlin
android-intent
android-activity
J Adonai Dagdag
sumber
sumber
Jawaban:
Untuk memulai
Activity
di java yang kami tulisIntent(this, Page2.class)
, pada dasarnya Anda harus mendefinisikanContext
di parameter pertama dan kelas tujuan di parameter kedua. MenurutIntent
metode dalam kode sumber -Seperti yang Anda lihat, kita harus memasukkan
Class<?>
tipe dalam parameter kedua.Dengan menulis
Intent(this, Page2)
kami tidak pernah menentukan kami akan lulus kelas, kami mencoba untuk mengirimkanclass
jenis yang tidak dapat diterima.Gunakan
::class.java
yang merupakan alternatif.class
di kotlin. Gunakan kode di bawah ini untuk memulaiActivity
Contoh -
sumber
::class.java
bukan.class
? Pendekatan Kotlin sangat rumit, dibandingkan dengan Java.class
mengembalikan KotlinKClass
, tetapi Android mengharapkan JavaClass<...>
, karena itulah.java
propertinya.Cukup Anda dapat memulai
Activity
diKOTLIN
dengan menggunakan metode sederhana ini,sumber
putExtra
metode. Saya baru saja menambahkannya untuk nilai kelulusan saat memulai yang baruActivity
Untuk memulai Aktivitas baru,
Jadi ubah kode Anda menjadi:
sumber
Anda biasanya dapat menyederhanakan spesifikasi parameter
BlahActivity::class.java
dengan menentukan fungsi generik yang direifikasi sebaris.Karena itu memungkinkan Anda melakukannya
Atau bahkan lebih sederhana
Jadi sekarang
sumber
inline fun <reified T: Activity> Context.createIntent(vararg extras: Pair<String, Any?>) = Intent(this, T::class.java).apply { putExtras(bundleOf(*extras)) }
alih - alih apa yang saya katakan dan itu akan berfungsi (dengan asumsi Anda memilikibundleOf
dari android-ktx atau anko)Anda harus memberikan argumen kedua untuk tipe kelas. Anda juga bisa membuatnya sedikit lebih rapi seperti di bawah ini.
sumber
Coba ini
sumber
Ini adalah aktivitas utama saya di mana saya mengambil nama pengguna dan kata sandi dari edit teks dan pengaturan ke maksud
Ini adalah aktivitas kedua saya di mana saya harus menerima nilai dari aktivitas utama
sumber
Ini karena
Page2
kelas Anda tidak memiliki objek pendamping yang mirip denganstatic
di Java sehingga untuk menggunakan kelas Anda. Untuk melewatkan kelas Anda sebagai argumenIntent
, Anda harus melakukan sesuatu seperti inisumber
Dari aktivitas ke aktivitas
Dari fragmen ke aktivitas
sumber
Nah, menurut saya 2 cara ini menjadi yang paling sederhana dari semua hasil:
Cara # 1:
Cara # 2: (Dengan cara yang umum)
sumber
sumber
Saya memiliki masalah serupa, saya mulai menulis aplikasi saya di Kotlin, setelah saya menulis ulang salah satu aktivitas saya, saya ingin melihat apakah ada masalah, masalahnya adalah saya tidak yakin bagaimana cara mengirim maksud dari file java ke kotlin mengajukan.
Dalam hal ini saya membuat fungsi statis di kotlin (objek pendamping), fungsi ini mendapatkan konteks (dari aktivitas saat ini) dan mengembalikan maksud baru saat menggunakan konteks saat ini (konteks "java") saat menggunakan kelas kotlin (" :: class.java ").
Ini kode saya:
sumber
@JvmStatic
kenewIntent
metode Anda, Anda dapat memanggilnya dari java tanpaCompanion
bagian.Detail
Langkah 1. Aplikasi ()
Langkah 2. Tambahkan objek Router
Pemakaian
sumber
Ingatlah untuk menambahkan aktivitas yang ingin Anda tampilkan, ke Anda
AndroidManifest.xml
juga :-) Itu adalah masalah saya.sumber
Bagaimana dengan ini untuk mempertimbangkan enkapsulasi?
Sebagai contoh:
sumber
Anda dapat menggunakan file Kotlin dan Java dalam aplikasi Anda.
Untuk beralih di antara dua file, pastikan Anda memberinya <action android: name = "" yang unik di AndroidManifest.xml, seperti ini:
Kemudian di MainActivity.kt (file Kotlin) Anda, untuk memulai Aktivitas yang ditulis di Java, lakukan ini:
Di MainActivityJava.java (file Java) Anda, untuk memulai Aktivitas yang ditulis di Kotlin, lakukan ini:
sumber
cara sederhana lain untuk menavigasi ke aktivitas lain adalah
sumber