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 Intentclase. ¿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
Activityen Java que escribimosIntent(this, Page2.class), básicamente tienes que definirContexten el primer parámetro y la clase de destino en el segundo parámetro. Según elIntentmé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 unclasstipo que no es aceptable.Uso
::class.javaalternativo de.classen kotlin. Utilice el siguiente código para iniciar suActivityEjemplo -
fuente
::class.javalugar de.class? El enfoque de Kotlin es inusualmente complicado, en comparación con Java.classdevuelve un KotlinKClass, pero Android espera un JavaClass<...>, de ahí la.javapropiedad.Simplemente puede iniciar una
ActivityenKOTLINel uso de este método simple,fuente
putExtramétodo. Lo acabo de agregar para pasar valores al comenzar de nuevoActivityPara iniciar una nueva actividad,
Así que cambia tu código a:
fuente
En general, puede simplificar la especificación del parámetro
BlahActivity::class.javadefiniendo 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 tengabundleOfdesde 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
Page2clase no tiene un objeto complementario que sea similar alstaticde 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
@JvmStatica sunewIntentmétodo, puede llamarlo desde java sin laCompanionparte.Detalles
Paso 1. Aplicación ()
Paso 2. Agregar objeto de enrutador
Uso
fuente
Recuerde agregar la actividad que desea presentar a su
AndroidManifest.xmltambié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