lunes, 26 de enero de 2015

(Clase #6) ANDROID STUDIO: primer proyecto del curso.

Esta vez ya que hemos tenido 5 clases donde hemos aprendido herramientas básicas de Android studio, ahora realizaremos un proyecto que nos permitirá mezclar todo lo aprendido en una aplicación, el título de nuestra aplicación será:  “Examen de múltiples alternativas” entonces nuestra aplicación realizara un examen o cuestionario con preguntas y al final nos dirá cuanto obtuvimos en el examen. 
Describiremos un poco este examen.
·      -   Primero para poder visualizar las preguntas del examen en la aplicación tenemos que identificarnos como estudiantes por lo cual como primera interfaz tendrá una Actividad de Login, que ya conocemos gracias  la clase (#4).
·         -Luego tendrá una interfaz para cada pregunta con alternativas de única respuesta y un botón que nos permita pasar a la siguiente pregunta.
·         -Al final tendremos un formulario con la calificación o puntaje obtenido.

DISEÑO DE FORMULARIOS DEL PROYECTO.
Nuestras pantallas deberían quedar como las siguientes imágenes esta vez no especificaremos las herramientas utilizadas por que ya hablamos de estas en el las 5 clases anteriores.:

Activity 1:


Activity 2:


Activity 3:


Activity 4:

Activity 5:


Muy bien antes de mostrar el programa si alguno no vio las clases anteriores o hay alguna herramienta que no sabe como se esta utilizando o como se llama le recomiendo ver el video ilustrativo en el canal de YouTubeel cual estará con el mismo nombre que en el blog.

DESCRIPCIÓN DEL CÓDIGO:

Activity 1: en el activity uno podemos ver una interfaz correspondiente a un login, el cual dejara acceder al sistema solamente a las personas que tiene registrado internamente, en este caso hemos registrado a tres personas con nombres obvios (estudiante1, estudiante2, estudiante3) y cada uno con contraseña también obvia. Estas personas están almacenadas en una lista a la cual podemos agregar mas usuarios  o quitar los accesos. Para ello teniendo en cuenta conocimientos de programación, hemos creado una clase llamada Cestudinate la cual nos ayuda a manejar objetos de tipo estudiante como veremos en la imagen:


En el pequeño resaltado de rojo podemos ver la clase creada, y en el resaltado grande las propiedades y el constructor implementada de la clase, las cuales pueden ser generadas automáticamente por Android studio haciendo clic izquierdo en el nombre de clase y luego dirigiéndose a generate constructor, para el constructor de clase y clic izquierdo en los atributos luego generate propiedades para los atributos de clase. Puede ver la explicación de ello, siga este enlace.
Ahora veremos el código de como agregamos Cestudiante, a una lista de tipo ArrayList, la cual contendrá objetos declarado de la forma como esta implementado el constructor de nuestra clase.



En este código vemos que en el método cargarestudiantes() creamos un objeto de tipo estudiante y agregamos a una lista llamada m_estudiantes, la cual es un ArrayList de Cestudiante.
También podemos ver el método VerificarDatos(), el cual verifica si el usuario y la contraseña ingresados en el primer Activity son correctos o están en la lista de estudiantes.
Entonces estos métodos para que funcionen debemos colocarlos en los lugares que les corresponden, al método cargarestudiantes() lo colocamos en el main o programa principal y al método VerificarDatos( ), lo vinculamos a la propiedad onclic del botón ingresar que pusimos en el primer activity. Esto quedaría de la siguiente forma:


El código completo del proyecto podemos encontrarlo el parte inferior del blog y además un link de descarga que ayudara a obtener el código fuente en Android studio.

Activity 2: ahora veremos como hemos implementado el código del Activity 2 donde se encuentra la primera pregunta y enviaremos en una variable ArryInt el puntaje obtenido por responder la pregunta para esto utilizaremos la clase Bundle que ya conocemos.


Vemos en este código que declaramos variables como ya sabemos para poder utilizar las herramientas colocadas en el layout.
Si analizamos el método OnclicConfirmar(), nos damos cuenta que este método envía al siguiente formulario un arreglo de tipo int[], llamado puntos, luego creamos un p1 de tipo Bundle el cual como ya sabes nos ayudara aenviar el mensaje.
En la parte condicional del método verificamos si la respuesta seleccionada es la correcta, como vemos en caso lo sea actualizamos uno de los valores del arreglo puntos con el valor 1. Por ultimo simplemente utilizamos la clase Intent , enviamos y llamamos al siguiente formulario.
Este método debemos vincularlo a la propiedad onclic y del botón confirmar del segundo Activity.
Activity 3: en el código de este Activity recepcionamos el mensaje en otra variable de tipo Int[], y luego seguimos la misma mecánica para enviar el nuevo Array a la siguiente actividad.



Vemos que para recibir el mensaje volvemos a utilizar la clase Bundle ya explicada en anteriores clases y le damos el valor recibido a una variable llamada aPuntos.

Activity 4: este activity tiene la misma mecánica que el Activity 3 por tanto solo copiaremos el código y cambiaremos algunos valores esto lo podrá ver mejor en el video ilustrativo.

Activity 5: en este activity recibimos el arreglo int[] con todo los valores actualizados y sumamos los puntos o valores del arreglo para saber el puntaje obtenido por el estudiante.


Como ya sabemos declaramos e inicializamos las variables, recibimos el mensaje que nos enviaron, sumamos los valores del arreglo puntos y lo almacenamos en la variable resultado, por ultimo le decimos a nuestro TextView que muestre el resultado.

CÓDIGO FUENTE DE LA APLICACIÓN:

ACTIVITY 1 (main)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:weightSum="1"
    android:background="#ffbfffaf">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="EXAMEN DE APTITUD"
        android:id="@+id/textView"
        android:textSize="30dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textColor="#ff2858ff"
        android:textStyle="bold"
        android:layout_gravity="center_horizontal" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="300dp"
        android:layout_weight="0.70"
        android:gravity="center_horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Usuario:"
            android:id="@+id/textView2"
            android:layout_marginTop="119dp"
            android:textColor="#ff040404"
            android:textSize="25dp"
            android:layout_alignParentTop="true"
            android:layout_alignLeft="@+id/textView3"
            android:layout_alignStart="@+id/textView3"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Contraseña:"
            android:id="@+id/textView3"
            android:layout_below="@+id/textView2"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="42dp"
            android:textColor="#ff030303"
            android:textSize="20dp"
            android:textStyle="bold" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/et_usuario"
            android:layout_alignBottom="@+id/textView2"
            android:layout_toRightOf="@+id/textView3"
            android:layout_toEndOf="@+id/textView3"
            android:text="estudiante1" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/et_contraseña"
            android:text="123456"
            android:layout_alignBottom="@+id/textView3"
            android:layout_alignLeft="@+id/et_usuario"
            android:layout_alignStart="@+id/et_usuario" />
    </RelativeLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ingresar"
        android:id="@+id/btn_ingresar"
        android:textColor="#ff060606"
        android:onClick="OnclicIngresar" />

</LinearLayout>

ACTIVITY 2: (pregunta1)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.dgafz.clase6_primeroproyecto.pregunta1"
    android:orientation="vertical"
    android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="PREGUNTA Nº 1- LAYOUT"
        android:id="@+id/textView4"
        android:textStyle="bold"
        android:textSize="27dp"
        android:textColor="#ff4249ff"
        android:layout_weight="0.07" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1.- En android Studio: ¿Que layout nos facilita la posibilidad de colocar las herrammientas como si tuvieramos una matriz de NxM?"
        android:id="@+id/textView5"
        android:textSize="25dp"
        android:layout_weight="0.32" />

    <RadioGroup
        android:layout_width="315dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.16">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="a) Linear Layout (vertival)"
            android:id="@+id/rb_a"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="b) TableLayout"
            android:id="@+id/rb_b"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="c) FrameLayout"
            android:id="@+id/rb_c"
            android:checked="false"
            android:textSize="20dp" />
    </RadioGroup>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Confirmar Respuesta"
        android:id="@+id/btn_confirmar1"
        android:layout_gravity="center_horizontal"
        android:onClick="OnclicConfirmar1" />

</LinearLayout>

ACTIVITY 3: (pregunta2)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.dgafz.clase6_primeroproyecto.pregunta2"
    android:orientation="vertical"
    android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="PREGUNTA Nº 2 - EDITTEXT"
        android:id="@+id/textView6"
        android:layout_gravity="center_horizontal"
        android:textColor="#ff4e62ff"
        android:textSize="27dp"
        android:textStyle="bold"
        android:layout_weight="0.03" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1.- Acerca de las propiedades de los EditText: ¿Que propiedad nos permite mostrar simbolos como(*)en vez del texto que escribimos al ingresar datos por un EditText?"
        android:id="@+id/textView7"
        android:layout_weight="0.14"
        android:textSize="25dp" />

    <RadioGroup
        android:layout_width="265dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.15">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="a) textAppearance"
            android:id="@+id/rb_a2"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="b) textpassword"
            android:id="@+id/rb_b2"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="c) Password"
            android:id="@+id/rb_c2"
            android:checked="false"
            android:textSize="20dp" />
    </RadioGroup>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cinfirmar Respuesta"
        android:id="@+id/btn_confirmar2"
        android:layout_gravity="center_horizontal"
        android:onClick="onclicconfirmar2" />

</LinearLayout>

ACTIVITY 4 (pregunta4)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.dgafz.clase6_primeroproyecto.pregunta3"
    android:orientation="vertical"
    android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="44dp"
        android:text="PREGUNTA Nº2 - METODOS DE CLASE"
        android:id="@+id/textView8"
        android:textColor="#ff4258ff"
        android:textSize="19dp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3.- ¿Que clase interna del android studio nos permite enviar mensajes en variables a otra actividad mediante la clase intent?"
        android:id="@+id/textView9"
        android:textSize="20dp"
        android:layout_weight="0.12"
        android:textStyle="bold" />

    <RadioGroup
        android:layout_width="272dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.21">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="a) Intent"
            android:id="@+id/rb_a3"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="b) Bundle"
            android:id="@+id/rb_b3"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="c) startactivity()"
            android:id="@+id/rb_c3"
            android:checked="false"
            android:textSize="20dp" />
    </RadioGroup>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CONFIRMAR RESPUESTA"
        android:id="@+id/btn_confirmar3"
        android:layout_gravity="center_horizontal"
        android:onClick="oncilciconfirmar3" />

</LinearLayout>

ACTIVITY 4 (pregunta4)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.dgafz.clase6_primeroproyecto.pregunta3"
    android:orientation="vertical"
    android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="44dp"
        android:text="PREGUNTA Nº2 - METODOS DE CLASE"
        android:id="@+id/textView8"
        android:textColor="#ff4258ff"
        android:textSize="19dp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3.- ¿Que clase interna del android studio nos permite enviar mensajes en variables a otra actividad mediante la clase intent?"
        android:id="@+id/textView9"
        android:textSize="20dp"
        android:layout_weight="0.12"
        android:textStyle="bold" />

    <RadioGroup
        android:layout_width="272dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.21">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="a) Intent"
            android:id="@+id/rb_a3"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="b) Bundle"
            android:id="@+id/rb_b3"
            android:checked="false"
            android:textSize="20dp" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="c) startactivity()"
            android:id="@+id/rb_c3"
            android:checked="false"
            android:textSize="20dp" />
    </RadioGroup>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CONFIRMAR RESPUESTA"
        android:id="@+id/btn_confirmar3"
        android:layout_gravity="center_horizontal"
        android:onClick="oncilciconfirmar3" />

</LinearLayout>

ACTIVITY 5 (resultados)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.dgafz.clase6_primeroproyecto.resultado">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="RESULTADOS"
        android:id="@+id/textView10"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textColor="#ff2b39ff"
        android:textSize="30dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Puntaje Obtenido"
        android:id="@+id/textView12"
        android:textSize="25dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="59dp"
        android:textStyle="bold"
        android:layout_below="@+id/textView10" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:id="@+id/tv_puntaje"
        android:layout_below="@+id/textView12"
        android:layout_toRightOf="@+id/textView12"
        android:layout_toEndOf="@+id/textView12"
        android:textSize="30dp" />

</RelativeLayout>

CODIGO EN JAVA:

CODIGO DE Cestudiante

package com.dgafz.clase6_primeroproyecto;

/**
 * Created by dgafz on 24/01/2015.
 */
public class Cestudiante {


    private String a_usuario;
    private String a_contraseña;
//constructor *********************************
    public Cestudiante(String a_usuario, String a_contraseña) {
        this.a_usuario = a_usuario;
        this.a_contraseña = a_contraseña;
    }
    //propiedades********************************
    public String getA_usuario() {
        return a_usuario;
    }

    public void setA_usuario(String a_usuario) {
        this.a_usuario = a_usuario;
    }
    public String getA_contraseña() {
        return a_contraseña;
    }

    public void setA_contraseña(String a_contraseña) {
        this.a_contraseña = a_contraseña;
    }
}

Codigo java  Main:

package com.dgafz.clase6_primeroproyecto;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;


public class MainActivity extends ActionBarActivity {
    //declaramos nuestras variables de clase
    private EditText m_et_usuario, m_et_contraseña;
    private Button m_btn_ingresar;
    private ArrayList<Cestudiante> m_estudiantes;
    //fin variables

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //inicializamos las variables
        m_et_usuario=(EditText)findViewById(R.id.et_usuario);
        m_et_contraseña=(EditText) findViewById(R.id.et_contraseña);
        m_btn_ingresar=(Button)findViewById(R.id.btn_confirmar1);
        m_estudiantes=new ArrayList<Cestudiante>();
                //fin inicializar las variables
        CargaEstudiantes();
    }

    //*********************** otros metodos ********************
    public void CargaEstudiantes()
    {
        //creamos estudiantes con contraseña y usuario
        Cestudiante e1= new Cestudiante("estudiante1","1111");
        m_estudiantes.add(e1);
        Cestudiante e2= new Cestudiante("estudiante2","2222");
        m_estudiantes.add(e2);
        Cestudiante e3= new Cestudiante("estudiante3","3333");
        m_estudiantes.add(e3);
        //hasta aqui tnemos tres estudiantes almacenados en una lista de nombre m_estudinate
    }
    //metodo que verifica si el usuario o contraseña son correctos
    public boolean VerificarDatos(String p_Usuario, String p_contraseña)
    {
        //crearemos una variable boleana la que nos devolver el resultado
        boolean aux=false;
        int i=0;
        while (i<m_estudiantes.size())
        {
            //verificamos que el usuairo y contraseña sean iguales al de la lisat en pisicion i
                //primero recuperaos el primer elemento
            String usuario=m_estudiantes.get(i).getA_usuario();
            String contraseña=m_estudiantes.get(i).getA_contraseña();
            if ((usuario.equals(p_Usuario))&&(contraseña.equals(p_contraseña)))
            {
                aux= true;
            }
            i++;
        }
        return aux;
    }
    //metodo que llama la interfaz de preguntas
    public void OnclicIngresar(View view)
    {
        if (VerificarDatos(m_et_usuario.getText().toString(),m_et_contraseña.getText().toString()))
        {
            Intent preguntas=new Intent(this,pregunta1.class);
            startActivity(preguntas);
        }
        else
        {
            Toast.makeText(getApplicationContext(),"datos incorrectos",Toast.LENGTH_LONG).show();
        }
    }
    //********************** fin otros metodos *****************

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

codigo java pregunta1

package com.dgafz.clase6_primeroproyecto;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;


public class pregunta1 extends ActionBarActivity {

    private RadioButton m_rb_alternativa2;
    private Button m_btn_confirmar1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pregunta1);
        //inicializamos los valores
        m_rb_alternativa2=(RadioButton) findViewById(R.id.rb_b);
    }
    //metodo que verifica si la respuesta es correcta
    public void OnclicConfirmar1(View view)
    {
        int[] puntos={0,0,0};//este arreglo cambiara sus valores a uno si las respuestas son correctas
        //creamos la clase que enviara nuestro emsaje
        Bundle p1=new Bundle();
        p1.putIntArray("puntos",puntos);
        //sabemos que la respuesta es la alternativa b
        if (m_rb_alternativa2.isChecked())
        {
            //enviamos datos al siguiente formulario mediante un arreglo de tamaño 3
            puntos[0]=1;
        }
        Intent i=new Intent(this,pregunta2.class);
        i.putExtras(p1);
        startActivity(i);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_pregunta1, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

 codigo java pregunta2

package com.dgafz.clase6_primeroproyecto;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;


public class pregunta2 extends ActionBarActivity {

    private RadioButton m_alternativacorrecta;
    private Button m_btn_confirmar2;
    private int[] aPuntos;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pregunta2);
        //inicializamos la variables
        m_alternativacorrecta=(RadioButton) findViewById(R.id.rb_c2);
        m_btn_confirmar2=(Button) findViewById(R.id.btn_confirmar2);
        //recibimos el mensaje
        Bundle p1r=this.getIntent().getExtras();
        aPuntos=p1r.getIntArray("puntos");
    }
//********************otros metodos *********************
    public void onclicconfirmar2(View view)
    {
        //creamos la calses que nos ayudaran a enviar los nuevos resultados
        Bundle p2=new Bundle();
        if (m_alternativacorrecta.isChecked())
        {
            aPuntos[1]=1;
        }
        p2.putIntArray("puntos",aPuntos);
        Intent i=new Intent(this,pregunta3.class);
        i.putExtras(p2);
        startActivity(i);
    }
    //***************fin otros metodos********************+

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_pregunta2, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Codigo java pregunta3

package com.dgafz.clase6_primeroproyecto;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;


public class pregunta3 extends ActionBarActivity {
    private RadioButton m_alternativacorrecta;
    private Button m_btn_confirmar3;
    private int[] apuntos;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pregunta3);
        //inicializamos las variables
        m_alternativacorrecta=(RadioButton) findViewById(R.id.rb_b3);
        m_btn_confirmar3=(Button) findViewById(R.id.btn_confirmar3);
        //recibimos le mensaje
        Bundle p2r=this.getIntent().getExtras();
        apuntos=p2r.getIntArray("puntos");
    }

    //verificamos la respuesta
    public void oncilciconfirmar3(View view)
    {
        //creamos la clase para enviar le mensaje
        Bundle p3=new Bundle();
        if (m_alternativacorrecta.isChecked())
        {
            apuntos[2]=1;
        }
        p3.putIntArray("puntos",apuntos);
        Intent i=new Intent(this,resultado.class);
        i.putExtras(p3);
        startActivity(i);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_pregunta3, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

codigo java resultado:

package com.dgafz.clase6_primeroproyecto;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;


public class resultado extends ActionBarActivity {
    //declaramos las variables
    private TextView m_tv_puntajes;
    int[] puntos;
    // fin de las variables

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resultado);
        //inicializamos las variables
        m_tv_puntajes=(TextView) findViewById(R.id.tv_puntaje);
        //resivimos los datos y mostrams los resultados
        Bundle p3r=this.getIntent().getExtras();
        //almacenmos ls recivido en la variable puntos
        puntos=p3r.getIntArray("puntos");
        //mostramos los resultados
       int resultado=puntos[0]+puntos[1]+puntos[2];
        m_tv_puntajes.setText(""+resultado);

    }

    //*********************otros metodo **************************
    //********************* fin otros metodos ********************
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_resultado, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


martes, 20 de enero de 2015

(clase #5) ANDROID STUDIO: INTERACCION ENTRE DOS ACTIVITY, CERRAR UNA APLICACION

(CLASE #5) ANDROID STUDIO: INTERACCION ENTRE DOS ACTIVITY., COMUNICACIÓN ENTRE DOS PANTALLAS.

Esta práctica de Android studio consistirá en abrir un activity desde otro activity, además también enviaremos un parámetro al activity secundario, o activity que será accedido desde el activity principal. Para ello utilizaremos pocas herramientas entre ellas recordar que los títulos mostrados son herramientas de etiqueta (TextView).
Como es costumbre mencionaremos la herramientas que nos ayudaran a la programación con sus respectivos Id y Text.
·         En el formulario principal tendremos:
o    (EditText) Id:et_texto; Text=”hola desde el principal”
o   (Button) Id:btn_enviar; Text=”ENVIAR”
·         En el formulario secundario utilizaremos:
o   (TextView) id:tv_recibido; Text: ”texto”;
o   (Button) id:btn_close; Text: “cerrar”

El formulario principal debería quedar de la siguiente forma:


Para agregar una nueva Actividad (Activity) debemos realizar los paso que nos muestra la siguiente imagen, y luego ponerle el nombre: activity_secundario para el caso de este proyecto.


Entonces con lo mencionado en la primera parte de la descripción del proyecto en Android studio nuestra segunda interfaz debería quedar de la siguiente forma. No olvide colocar los id, por si desea ver algo del código fuente que dejaremos en la última parte de la descripción de este proyecto:


Ya sabemos que para cambiar los colores y tamaño de textos mostrados solamente debemos editar las propiedades TextColor y Texsize.
Ahora hablaremos un poco del código que implementaremos recordándoles que pueden ver el video tutorial de cada tema para que las cosas queden mejor alcaradas.
PRIMERA ACTIVIDAD (ACTIVITY).- como ya sabemos por las anteriores guias, debemos declarar las variables que nos ayudaran a enlazar la interfaz con la programación.
Luego abriremos líneas de código que nos ayudara a enviar un mensaje desde esta actividad a la actividad secundaria, utilizando la clase interna Bundle y el método de clase PutExtras(“clave”,”parámetro a enviar”); la clave nos ayudara a reconocer lo enviado en el formulario que recibirá el mensaje. Bueno veamos un poco como quedaría el código, recuerde leer la descripción que se  redacta para cada línea de código:



Todo lo descrito anteriormente lo encontramos en le método onclicBtnEnviar(View view), el parámetro View porque utilizaremos este método en el evento clic del botón btn_enviar. También veremos la clase Intent la cual nos ayudara a llamar o invocar la interfaz que queramos en este caso la interfaz es Activity_secundario.
AHORA VEREMOS EL PROGRAMA EN EL ACTIVITY SECUNDARIO

Aquí volveremos a ver la Clase Bundle ya que esta es la clase encargada de ser como intermediario o mensajero dicho en términos más sencillos esta clase nos ayuda a enviar el mensaje, y como lo dijimos antes para enviar el mensaje necesitamos un clave, esta clave en el ejemplo es “texto”, mediante la cual recepcionaremos el mensaje en la variable textoreci. Luego simplemente escribiremos el mensaje recibido en pantalla.



Ahora para dar funcionalidad el botón CERRAR, utilizaremos el método onclicBtnClose(View vie), dentro pondremos el método finish() que cerrara la actividad.

AHORA NO OLVIDEMOS ANTES DE EJECUTAR LA APLICAION VINCULAR LOS EVENTOS ONCLIC, DE CADA BOTON CON EL METODO QUE LE CORRESPONDE ESTO PUDE VERLO EN EL VIDEO TUTORIAL.

·         btn_enviar: onclic(onclicBtnEnviar(View, view))
·         btn_Close: onclic(onclicBntClose(View view))

Veamos el resultado de la aplicación:





ahora les dejaremos el código fuente:

primero el Xml del formulario Principal:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ACTIVITY PRINCIPAL"
        android:textSize="30dp"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textColor="#ff31aaff"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Texto a Enviar:"
        android:id="@+id/textView2"
        android:layout_below="@+id/textView"
        android:layout_alignLeft="@+id/textView"
        android:layout_alignStart="@+id/textView"
        android:layout_marginTop="52dp"
        android:textSize="25dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/et_texto"
        android:layout_below="@+id/textView2"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignStart="@+id/textView2"
        android:layout_marginTop="40dp"
        android:text="HOLA DESDE EL PRINCIPAL" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enviar"
        android:id="@+id/btn_enviar"
        android:textSize="25dp"
        android:layout_marginTop="96dp"
        android:onClick="onclicBtnEnviar"
        android:layout_below="@+id/et_texto"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

Ahora dejaremos el xml del segundo formulario:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.dgafz.clase5.Activity_secundario"
    android:id="@+id/layout1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ACTIVITY SECUNDARIO"
        android:id="@+id/textView3"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textSize="30dp"
        android:textColor="#ffff4731"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mensaje Recibido:"
        android:id="@+id/textView4"
        android:layout_below="@+id/textView3"
        android:layout_alignLeft="@+id/textView3"
        android:layout_alignStart="@+id/textView3"
        android:layout_marginTop="40dp"
        android:textColor="#ff3924ff"
        android:textSize="25dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="texto"
        android:id="@+id/tv_recibido"
        android:layout_marginTop="46dp"
        android:textStyle="bold"
        android:textSize="30dp"
        android:layout_below="@+id/textView4"
        android:layout_alignLeft="@+id/textView4"
        android:layout_alignStart="@+id/textView4" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="cerrar"
        android:id="@+id/btn_close"
        android:layout_below="@+id/tv_recibido"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="127dp"
        android:onClick="onclicBtnClose" />
</RelativeLayout>

ahora dejaremos el código java del formulario principal

package com.dgafz.clase5;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends ActionBarActivity {
    //declaramos la variables de enlace
    private EditText m_et_texto;
    private Button m_btn_enviar;
    //fin de variables

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //ahora inicializamos la variables
        m_et_texto=(EditText) findViewById(R.id.et_texto);
        m_btn_enviar=(Button) findViewById(R.id.btn_enviar);
        //fin de inicializacion
    }
    //otros metodos
    //ahora programamos el boton enviar
    public void onclicBtnEnviar(View view)
    {
        //primero recuperamos el texto que vamos a enviar
        String texto=m_et_texto.getText().toString();
        //CREAMOS LA CLASE QUE SERA EL MENSAJERO
        Bundle TextoEnviar=new Bundle();
        TextoEnviar.putString("texto",texto);
        //declaramos la interfaz que queremos abrir
        Intent i=new Intent(this,Activity_secundario.class);//(de donde vamos a llamar , a quien vamso a llamar)
        //ahora mediante este codigo le decimos a la clse mensajer enviar
        i.putExtras(TextoEnviar);
        //iniciamos el segundo activity
        startActivity(i);
    }
    //fin otros metodos
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

código java del segundo formulario:

package com.dgafz.clase5;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class Activity_secundario extends ActionBarActivity {

    //declaramos la variables
    private TextView m_tv_recibido;
    private Button m_btn_close;
    //fin de las variables
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_secundario);
        //inicalizamos la variables
        m_tv_recibido=(TextView) findViewById(R.id.tv_recibido);
        m_btn_close=(Button) findViewById(R.id.btn_close);
        //fin incializar las variables

        //ahora debemos recibir el valor que nos enviaron para ello nos ayudara la calse bundle
        Bundle Textorecibido=this.getIntent().getExtras();
        //ahora le diremos que es lo que deseamos recibir me diante al palabra clave en este caso pusimos "texto"
        String textoreci=Textorecibido.getString("texto");
        //ahora lo mostraremos en pantalla
        m_tv_recibido.setText(textoreci);
    }
    //otros metodos
    public  void onclicBtnClose(View view)
    {
        //codigo para cerrar la aplicaion
        finish();
    }
    //fin de otros metodos
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_activity_secundario, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}