Quiero iniciar otra actividad en Android pero aparece este error:
Especifique la invocación del constructor; el clasificador 'Page2' no tiene un objeto complementario
después de crear una instancia de la Intent
clase. ¿Qué debo hacer para corregir el error? Mi código:
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
fuente
fuente
Respuestas:
Para iniciar un
Activity
en Java que escribimosIntent(this, Page2.class)
, básicamente tienes que definirContext
en el primer parámetro y la clase de destino en el segundo parámetro. Según elIntent
método en el código fuente -Como puede ver, tenemos que pasar el
Class<?>
tipo en el segundo parámetro.Al escribir
Intent(this, Page2)
, nunca especificamos que vamos a aprobar la clase, estamos tratando de pasar unclass
tipo que no es aceptable.Uso
::class.java
alternativo de.class
en kotlin. Utilice el siguiente código para iniciar suActivity
Ejemplo -
fuente
::class.java
lugar de.class
? El enfoque de Kotlin es inusualmente complicado, en comparación con Java.class
devuelve un KotlinKClass
, pero Android espera un JavaClass<...>
, de ahí la.java
propiedad.Simplemente puede iniciar una
Activity
enKOTLIN
el uso de este método simple,fuente
putExtra
método. Lo acabo de agregar para pasar valores al comenzar de nuevoActivity
Para iniciar una nueva actividad,
Así que cambia tu código a:
fuente
En general, puede simplificar la especificación del parámetro
BlahActivity::class.java
definiendo una función genérica reificada en línea.Porque eso te deja hacer
O incluso más simple
Entonces es ahora
fuente
inline fun <reified T: Activity> Context.createIntent(vararg extras: Pair<String, Any?>) = Intent(this, T::class.java).apply { putExtras(bundleOf(*extras)) }
lugar de lo que dije y funcionará (suponiendo que tengabundleOf
desde android-ktx o anko)Tienes que dar el segundo argumento del tipo de clase. También puedes tenerlo un poco más ordenado como a continuación.
fuente
Prueba esto
fuente
Esta es mi actividad principal en la que tomo el nombre de usuario y la contraseña de editar texto y configurar la intención
Esta es mi segunda actividad donde tengo que recibir valores de la actividad principal.
fuente
Esto se debe a que su
Page2
clase no tiene un objeto complementario que sea similar alstatic
de Java, así que use su clase. Para pasar tu clase como argumentoIntent
, tendrás que hacer algo como estofuente
De actividad en actividad
Del fragmento a la actividad
fuente
Bueno, encontré estas 2 formas de ser el más simple de todos los resultados:
Camino # 1:
Camino # 2: (de manera genérica)
fuente
fuente
Tuve un problema similar, comencé a escribir mi aplicación en Kotlin, después de reescribir una de mis actividades quería ver si había algún problema, el problema era que no estaba seguro de cómo enviar una intención desde un archivo java a kotlin expediente.
En este caso, creé una función estática en kotlin (objeto complementario), esta función obtiene un contexto (de la actividad actual) y devuelve la nueva intención mientras usa el contexto actual (contexto "java") mientras usa la clase kotlin (" :: class.java ").
Aquí está mi código:
fuente
@JvmStatic
a sunewIntent
método, puede llamarlo desde java sin laCompanion
parte.Detalles
Paso 1. Aplicación ()
Paso 2. Agregar objeto de enrutador
Uso
fuente
Recuerde agregar la actividad que desea presentar a su
AndroidManifest.xml
también :-) Ese fue el problema para mí.fuente
¿Qué tal esto para considerar la encapsulación?
Por ejemplo:
fuente
Puede utilizar archivos Kotlin y Java en su aplicación.
Para cambiar entre los dos archivos, asegúrese de darles una <action android: name = "" única en AndroidManifest.xml, así:
Luego, en su MainActivity.kt (archivo Kotlin), para iniciar una actividad escrita en Java, haga esto:
En su MainActivityJava.java (archivo Java), para iniciar una actividad escrita en Kotlin, haga esto:
fuente
otra forma sencilla de navegar a otra actividad es
fuente