12 - Lanzar un segundo "Activity" y pasar parámetros

Hemos visto en el concepto anterior que un programa puede tener más de una ventana representando cada ventana con una clase que hereda de AppCompatActivity.
Una situación muy común es que la primer ventana necesite enviar datos a la segunda para que a partir de estos proceda a efectuar una acción.

Problema:

Confeccionar un programa que solicite el ingrese de una dirección de un sitio web y seguidamente abrir una segunda ventana que muestre dicha página.

Para resolver este problema utilizaremos el control visual WebView que nos permite mostrar el contenido de un sitio web.

Crearemos un nuevo proyecto llamado proyecto012.

1 - Nuestro primer Activity tendrá la siguiente interfaz visual (ver controles):
lanzar segundo Activity con parametros
Tenemos un control de tipo tipo EditText (ID = et1, hint = "Ingrese un sitio web") y otro de tipo Button (inicializar la propiedad id con el con el valor "boton1").

El código fuente de esta Activity es:

package com.tutorialesprogramacionya.proyecto012

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText

class MainActivity : AppCompatActivity() {

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

        val et1 = findViewById(R.id.et1) as EditText
        val boton1 = findViewById(R.id.boton1) as Button
        boton1.setOnClickListener {
            val intento1 = Intent(this, Actividad2::class.java)
            intento1.putExtra("direccion", et1.text.toString())
            startActivity(intento1)
        }
    }
}

Como podemos ver la diferencia con el concepto anterior es que llamamos al método putExtra de la clase Intent. Tiene dos parámetros de tipo String, en el primero indicamos el nombre del dato y en el segundo el valor del dato:

        boton1.setOnClickListener {
            val intento1 = Intent(this, Actividad2::class.java)
            intento1.putExtra("direccion", et1.text.toString())
            startActivity(intento1)
        }

La segunda interfaz visual (recordemos que debemos presionar el botón derecho en la ventana Project (sobre app) y seleccionar la opción New -> Activity -> Emplty Activity):

lanzar segundo Activity

En el diálogo que aparece especificamos el nombre de nuestra segundo Activity y lo llamaremos Actividad2:

lanzar segundo Activity con parametros

Disponemos un objeto de la clase WebView que se encuentra en la pestaña "Containers" y un Button:

lanzar segundo Activity con parametros

Codificamos la funcionalidad de la segunda actividad

package com.tutorialesprogramacionya.proyecto012

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.webkit.WebView
import android.widget.Button

class Actividad2 : AppCompatActivity() {

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

        val bundle = intent.extras
        val dato = bundle.getString("direccion")
        val webView1 = findViewById(R.id.webView1) as WebView
        webView1.loadUrl("http://${dato}")
        val boton1 = findViewById(R.id.boton1) as Button
        boton1.setOnClickListener { 
            finish();
        }

    }
}

En esta clase definimos una variable de tipo Bundle y la inicializamos con el valor de la propiedad extras de la propiedad intent del Activity (esto lo hacemos para recuperar el o los parámetros que envió la otra actividad (Activity)):

        val bundle = intent.extras
        val dato = bundle.getString("direccion")
        val webView1 = findViewById(R.id.webView1) as WebView
        webView1.loadUrl("http://${dato}")

El método loadUrl de la clase WebView permite visualizar el contenido de un sitio web.

Importante

Como nuestra aplicación debe acceder a internet debemos hacer una configuración en el archivo "AndroidManifest.xml", podemos ubicar este archivo:

lanzar segundo Activity con parametros

Agregamos el permiso tipeando lo siguiente en este archivo:

<uses-permission android:name="android.permission.INTERNET" />

Luego el archivo AndroidManifest.xml queda con el permiso agregado:

lanzar segundo Activity con parametros

Ahora nuestro programa debería estar funcionando completamente.

La primer ventana debería ser algo similar a esto:

lanzar segundo Activity con parametros

La segunda ventana debería ser algo similar a esto otro:

lanzar segundo Activity con parametros

Este proyecto lo puede descargar en un zip desde este enlace: proyecto012.zip