Sie sind auf Seite 1von 35

org.gradle.

jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Lección 4: Adapters - Spinner y GridView

Más implementaciones de los Adapters


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

SPINNER:

Llenando Spinner con ArrayAdapter


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

<string name="app_name">Spinner Adapters</string>

<string-array name="horario_de_clases">
<item>Matemáticas</item>
<item>Ciencias naturales</item>
<item>Ciencias sociales</item>
<item>Lengua castellana</item>
<item>Física</item>
<item>Quimica</item>
</string-array>

<string-array name="dias_semana">
<item>Lunes</item>
<item>Martes</item>
<item>Miercoles</item>
<item>Jueves</item>
<item>Viernes</item>
<item>Sábado</item>
</string-array>

<?xml version="1.0" encoding="utf-8"?>


<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.nextu.spinneradapters.MainActivity"
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

android:orientation="vertical">

<TextView
android:id="@+id/opcion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content">

</Spinner>

</LinearLayout>

package com.nextu.spinneradapters;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

import com.nextu.spinneradapters.adapter.HorarioSpinnerAdapter;
import com.nextu.spinneradapters.modelo.DiaHorario;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private Spinner spinner;


private ArrayList<DiaHorario> listaElementos;
private TextView opcion;

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

//ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this, R.array.horario_de_clases,
android.R.layout.simple_spinner_item);

//adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdow
n_item);
final String[] titulos =
getResources().getStringArray(R.array.horario_de_clases);
String[] subtitulos =
getResources().getStringArray(R.array.dias_semana);
listaElementos = new ArrayList<>();
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

for (int i=0; i<titulos.length; i++){


listaElementos.add(new DiaHorario(titulos[i],subtitulos[i]));
}

HorarioSpinnerAdapter adapter = new HorarioSpinnerAdapter(this,


listaElementos);

opcion = (TextView) findViewById(R.id.opcion);


spinner = (Spinner) findViewById(R.id.spinner);

spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
opcion.setText("Opcion: "+titulos[position]);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
opcion.setText("Opcion: ");
}
});
}
}
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/titulo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="@color/colorPrimaryDark"/>
<TextView
android:id="@+id/subtitulo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="italic"
android:textColor="@color/colorAccent"/>

</LinearLayout>

package com.nextu.spinneradapters.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.nextu.spinneradapters.R;
import com.nextu.spinneradapters.modelo.DiaHorario;

import java.util.List;

/**
* Created by Next University.
*/
public class HorarioSpinnerAdapter extends ArrayAdapter<DiaHorario> {
public HorarioSpinnerAdapter(Context context, List<DiaHorario>
objects) {
super(context, R.layout.spinner_template, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{

LayoutInflater inflater = LayoutInflater.from(getContext());


View elemento = inflater.inflate(R.layout.spinner_template,
null);
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

TextView titulo = (TextView) elemento.findViewById(R.id.titulo);


TextView subtitulo = (TextView)
elemento.findViewById(R.id.subtitulo);

titulo.setText(getItem(position).getAsignatura());
subtitulo.setText(getItem(position).getDia());

return elemento;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup
parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View elemento = inflater.inflate(R.layout.spinner_template,
null);

TextView titulo = (TextView) elemento.findViewById(R.id.titulo);


TextView subtitulo = (TextView)
elemento.findViewById(R.id.subtitulo);

titulo.setText(getItem(position).getAsignatura());
subtitulo.setText(getItem(position).getDia());

return elemento;
}
}

DIAHORARIO.JAVA
package com.nextu.spinneradapters.modelo;

/**
* Created by Next University.
*/
public class DiaHorario {

private String asignatura;


private String dia;

public DiaHorario(String asignatura, String dia) {


this.asignatura = asignatura;
this.dia = dia;
}

public String getAsignatura() {


return asignatura;
}

public void setAsignatura(String asignatura) {


this.asignatura = asignatura;
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

public String getDia() {


return dia;
}

public void setDia(String dia) {


this.dia = dia;
}

Llenando Spinner con un Adapter personalizado


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Creando clase Adapter para un GridView


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Utilizando clase Adapter para un GridView


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

EJM

<?xml version="1.0" encoding="utf-8"?>


<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:paddingBottom="@dimen/activity_vertical_margin"
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.nextu.gridviewadapters.MainActivity">

<GridView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:horizontalSpacing="2dp"
android:verticalSpacing="2dp"
android:stretchMode="columnWidth"></GridView>

</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>


<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.nextu.gridviewadapters.MainActivity">

<GridView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:horizontalSpacing="2dp"
android:verticalSpacing="2dp"
android:stretchMode="columnWidth"></GridView>

</RelativeLayout>

package com.nextu.gridviewadapters;

import android.content.res.TypedArray;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.GridView;

import com.nextu.gridviewadapters.adapter.CalendarioAdapter;
import com.nextu.gridviewadapters.modelo.Calendario;

import java.util.ArrayList;
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

public class MainActivity extends AppCompatActivity {

private GridView gridView;

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

CalendarioAdapter adapter = new CalendarioAdapter(this,


listar());

gridView = (GridView) findViewById(R.id.grid);


gridView.setAdapter(adapter);
}

private ArrayList<Calendario> listar(){


String[] meses = getResources().getStringArray(R.array.meses);
TypedArray imagenes =
getResources().obtainTypedArray(R.array.zodiaco);

ArrayList<Calendario> lista = new ArrayList<>();

for (int i=0;i<meses.length; i++){


lista.add(new Calendario(imagenes.getResourceId(i,0),
meses[i]));
}
return lista;
}
}

CALENDARIO.JAVA
package com.nextu.gridviewadapters.modelo;

/**
* Created by Next University.
*/
public class Calendario {

private String mes;


private int imagen;

public Calendario(int imagen, String mes) {


this.imagen = imagen;
this.mes = mes;
}

public String getMes() {


return mes;
}
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

public void setMes(String mes) {


this.mes = mes;
}

public int getImagen() {


return imagen;
}

public void setImagen(int imagen) {


this.imagen = imagen;
}

GRID.TEMPLE.XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tituloImagen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textAppearance="?android:textAppearanceMedium"/>
<ImageView
android:id="@+id/imagen"
android:layout_width="match_parent"
android:layout_height="100dp"
android:scaleType="centerCrop"/>

</LinearLayout>

package com.nextu.gridviewadapters.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nextu.gridviewadapters.R;
import com.nextu.gridviewadapters.modelo.Calendario;

import java.util.ArrayList;

/**
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

* Created by Next University.


*/
public class CalendarioAdapter extends BaseAdapter {

private ArrayList<Calendario> elementos;


private Context context;

public CalendarioAdapter(Context context, ArrayList<Calendario>


elementos) {
this.context = context;
this.elementos = elementos;
}

@Override
public int getCount() {
return elementos.size();
}

@Override
public Calendario getItem(int position) {
return elementos.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater=
LayoutInflater.from(parent.getContext());
View view = convertView;
if (convertView == null){
view = inflater.inflate(R.layout.grid_template,null);
}

TextView tituloImagen = (TextView)


view.findViewById(R.id.tituloImagen);
ImageView imagen = (ImageView) view.findViewById(R.id.imagen);

tituloImagen.setText(getItem(position).getMes());
imagen.setImageResource(getItem(position).getImagen());

return view;
}
}

<string name="app_name">GridView Adapters</string>

<!-- Meses del año-->


<string-array name="meses">
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

<item>Enero</item>
<item>Febrero</item>
<item>Marzo</item>
<item>Abril</item>
<item>Mayo</item>
<item>Junio</item>
<item>Julio</item>
<item>Agosto</item>
<item>Septiembre</item>
<item>Octubre</item>
<item>Noviembre</item>
<item>Diciembre</item>
</string-array>

<!-- Imagenes signos del zodiaco-->


<array name="zodiaco">
<item>@drawable/capricornio</item>
<item>@drawable/acuario</item>
<item>@drawable/picis</item>
<item>@drawable/aries</item>
<item>@drawable/tauro</item>
<item>@drawable/geminis</item>
<item>@drawable/cancer</item>
<item>@drawable/leo</item>
<item>@drawable/virgo</item>
<item>@drawable/libra</item>
<item>@drawable/scorpio</item>
<item>@drawable/sagitario</item>
</array>

</resources>

EJERCICIO: CODIFICACION1_ARQUITECTURA
Has sido contratado para la construcción de una aplicación nativa en Android, cuyo
objetivo es mostrar imágenes de algunas de las arquitecturas más famosas del
mundo.
La aplicación estará comprendida en dos partes. Inicialmente, la pantalla principal
contará con una interfaz compuesta por un título y dos botones que permitirán
acceder a otra Activity con una funcionalidad específica. El diseño de la pantalla
principal deberá tener una apariencia similar a la que se muestra en la siguiente
imagen:
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Una vez diseñada la pantalla principal, desarrollara el primer paso para la


implementación de tu aplicación, este es el principal objetivo de este ejercicio.
 La funcionalidad del primer botón, es decir, el botón Spinner, debe ser la de
navegar a otra Activity, compuesta por una interfaz con un
elemento Spinner y un ImageView, tal como lo muestra la siguiente
imagen:
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

 Luego debes crear un adaptador que permita al Spinner mostrar la


información relacionada con la arquitectura a ilustrar, para este caso
específico: un título, que será el nombre de la cultura de la arquitectura, y
un subtítulo el cual debe hacer referencia al nombre de la edificación. Por
ejemplo:
Título: Japonesa, Subtítulo: Templo Narita, Zen
Puedes verlo un poco más claro en la siguiente imagen:
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

 Por último, al seleccionar cualquier elemento del Spinner, debe cambiarse


automáticamente la imagen en el ImageView, ubicando en él una imagen
relacionada con el elemento elegido dentro del Spinner ejemplo:
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

SOLUCIÓN
Asegúrate de realizar la actividad y hallar tu propia solución.
También encontrarás una propuesta que te ofrecemos como guía para reforzar tus
conocimientos. Ejercitándote podrás mejorar tus habilidades para resolver este tipo
de problemas.
Si se te dificulta algún paso de la actividad recuerda que tu tutor en línea se
encuentra disponible para ayudarte y resolver cualquier duda o inquietud que tengas.
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Es importante que aprendas estos conceptos para tu formación como Desarrollador


en Android. Así que utiliza el archivo de solución únicamente para verificar tu
trabajo y asegurarte de que vas por el camino correcto. ¡Éxitos!

EJERCICIO: CODIFICACION2 ARQUITECTURA


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

SOLUCIÓN
Asegúrate de realizar la actividad y hallar tu propia solución.
También encontrarás una propuesta que te ofrecemos como guía para reforzar tus
conocimientos. Ejercitándote podrás mejorar tus habilidades para resolver este tipo
de problemas.
Si se te dificulta algún paso de la actividad recuerda que tu tutor en línea se
encuentra disponible para ayudarte y resolver cualquier duda o inquietud que tengas.
Es importante que aprendas estos conceptos para tu formación como Desarrollador
en Android. Así que utiliza el archivo de solución únicamente para verificar tu
trabajo y asegurarte de que vas por el camino correcto. ¡Éxitos!
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Dentro del contexto de la programación de Android, frecuentemente es utilizado un patrón de diseño que
nos permite crear un vínculo entre una fuente de datos y un componente visual, mostrando de esta
manera dicha información al usuario. ¿Cuál es éste patrón?

Seleccione una:

a. Brigde

b. Adapter

c. AbstractFactory

d. Builder

Retroalimentación
El patrón de diseño elegido no aplica esa mecánica.

La respuesta correcta es: Adapter

Pregunta 2
Incorrecta

Puntúa 0 sobre 1

Marcar con bandera la pregunta

Texto de la pregunta
Durante el proceso de navegación hacia otra Activity, interviene una clase la cual es la encargada de
lanzar o ejecutar dicha acción. ¿Cuál es esa clase?

Seleccione una:

a. Activity

b. TextView

c. Intent

d. View
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Retroalimentación
La clase elegida no corresponde con esa funcionalidad.

La respuesta correcta es: Intent

Pregunta 3
Correcta

Puntúa 1 sobre 1

Marcar con bandera la pregunta

Texto de la pregunta
Una característica común en las aplicaciones de la plataforma de Android es que todas cuentan con una
Activity principal o pantalla principal, la clase que nos representa dicha pantalla puede recibir el nombre
deseemos, pero por convención y de manera predeterminada el entorno de desarrollo Android Studio
llama a esta clase de una manera ¿Cuál es el nombre que ésta recibe?

Seleccione una:

a. ActivityMain

b. MainActivity

c. main_activity

d. activity_main

Retroalimentación
El nombre seleccionado no es el usado de manera predeterminada

La respuesta correcta es: MainActivity

Pregunta 4
Correcta

Puntúa 1 sobre 1

Marcar con bandera la pregunta


org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Texto de la pregunta
El ciclo de vida de una Activity está determinado por varios métodos que se ejecutan de manera
secuencial, organice el orden en el que estos son llamados durante el transcurso del ciclo de vida

onCreate Primero
Respuesta 1

onStart Segundo
Respuesta 2

onResume Tercero
Respuesta 3

onPause Cuarto
Respuesta 4

onStop Quinto
Respuesta 5

onDestroy Sexto
Respuesta 6

Retroalimentación
La respuesta correcta es: onCreate – Primero, onStart – Segundo, onResume – Tercero, onPause –
Cuarto, onStop – Quinto, onDestroy – Sexto

Pregunta 5
Correcta

Puntúa 1 sobre 1

Marcar con bandera la pregunta

Texto de la pregunta
En el desarrollo de las aplicaciones de la plataforma de Android, la implementación de la interfaz de
usuario y la lógica de la aplicación están separadas en archivos diferentes y que además manejan
lenguajes distintos. ¿Cuál es el lenguaje utilizado para la implementación de la lógica de las aplicaciones
en la plataforma de Android?

Seleccione una:

a. Java
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

b. XML

c. C++

d. C

Retroalimentación
El lenguaje utilizado no es el utilizado para la implementación lógica de la aplicación

La respuesta correcta es: Java

Pregunta 6
Correcta

Puntúa 1 sobre 1

Marcar con bandera la pregunta

Texto de la pregunta
Todo componente de tipo Activity pasa por un ciclo de vida en la memoria de un dispositivo con sistema
operativo Android, el primer método involucrado en éste ciclo es el encargado de iniciar la aplicación y
cargar las interfaces de usuarios. ¿Cuál es el nombre de dicho método?

Seleccione una:

a. onStart

b. onCreate

c. onRestart

d. onResume

Retroalimentación
El método seleccionado no realiza esa funcionalidad

La respuesta correcta es: onCreate

Pregunta 7
Correcta

Puntúa 1 sobre 1
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Marcar con bandera la pregunta

Texto de la pregunta
Durante el curso del ciclo de vida de un Activity, está pasa por varios estados, uno de ellos es el estado
Stopped, en el cual la Activity ya no se encuentra en el primer plano. ¿Cuál es el método del ciclo de
vida que trae nuevamente la Activity al primer plano de la interfaz de usuario?

Seleccione una:

a. onRestart

b. onResume

c. onCreate

d. onStop

Retroalimentación
El método escogido no cumple con dicha característica.

La respuesta correcta es: onRestart

Pregunta 8
Correcta

Puntúa 1 sobre 1

Marcar con bandera la pregunta

Texto de la pregunta
El proceso carga de la interfaz de usuario es realizada en la clase Java que representa la Activity. ¿Cuál
es el método que tiene como objetivo dicho proceso?

Seleccione una:

a. onCreate

b. onClick
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

c. setContentView

d. startActivity

Retroalimentación
El método seleccionado no cumple esa función

La respuesta correcta es: setContentView

Pregunta 9
Correcta

Puntúa 1 sobre 1

Marcar con bandera la pregunta

Texto de la pregunta
En el desarrollo de las aplicaciones de la plataforma de Android, la implementación de la interfaz de
usuario y la lógica de la aplicación están separadas en archivos diferentes y que además manejan
lenguajes distintos. ¿Cuál es el lenguaje utilizado para el diseño de la interfaz gráfica de usuario?

Seleccione una:

a. Java

b. Javascript

c. HTML

d. XML

Retroalimentación
El lenguaje escogido no corresponde con el utilizado para el diseño de la interfaz gráfica de usuario.

La respuesta correcta es: XML

Pregunta 10
Correcta

Puntúa 1 sobre 1
org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

Marcar con bandera la pregunta

Texto de la pregunta
Android nos permite crear nuestros propios Adapters para lograr un nivel de personalización a la cual tal
vez no llegamos usando las clases que él nos proporciona como lo es la clase ArrayAdapter, hablando
específicamente de los componentes de selección Spinners, cuando desarrollamos una adapter para este
tipo de elemento, ¿Cuál es el método adicional que debemos implementar?

Seleccione una:

a. getCount

b. getView

c. getItem

d. getDropDownView

Retroalimentación
El método elegido es normalmente implementado en los adapters, recuerda elegir el que no es usado
habitualmente.

La respuesta correcta es: getDropDownView

Finalizar revisión