La libreria Collections de java implementa varias estructuras de datos que nos permiten ahorrar tiempo y ganar en claridad. Esta aplicación usará la colección
ArrayList
que implementa la interfaz
List
. La elección de esta clase ha sido por motivos de claridad y no de optimización. La elcción más óptima habría sido tal vez alguna de la implementaciones de la interfaz
Qeue
.
Los métodos que se usarán serán :
List.Add(String)
: añadirá un nuevo robot a la lista
List.Remove(int)
: borará el elemento contenido en el indice dado.
List.size()
: devolverá el numero de elementos de la lista.
La aplicación contará de 2 actividades, una principal en la que se gestiona la lista y otra en la que se muestra con ayuda de una
ListView
.
La actividad principal lanza la actividad que muestra la lista de robots cuando se pulsa el botón
show
.
Primero se ha empezado por implementar la actividad principal como es lógico.
Lo primero que se ha hecho ha sido el “layout” que se ha realizado con ayuda del editor gráfico para establecer la jerarquía. Esta layout consta de :
Android permite autodimensionar una de las dimensiones de las views mediante pesos (
android:layout_weight
). De esta manera android establece diemsniones relativas proporcionales al peso asignado a cada view.
Para hacer uso de esta funcionalidad hay que poner la dimensión de interés a “0dp” : o bien
android:layout_height="0dp"
o bien
android:layout_weight="10"
. Una cosa que hay que tener en cuenta es que si se usa esta caracteristica en una View no se podrá poner a
"match_parent"
en las Views del mismo nivel jerárquico.
Para establecer los callback de los botones se ha usado la propiedad
android:onClick
. Las funciones de callback deben ser publicas y seguir el prototipo
public void botonClickedCalback(View v)
.
De esta manera el layout de la actividad principal queda de la siguiente manera.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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.example.abdel.robotsapp.MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"
app:srcCompat="@drawable/robot_noun_166712_cc"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:id="@+id/imageView" />
<TextView
android:text="foobar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"
android:id="@+id/textView_visor"></TextView>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="RobotName"
android:ems="10"
android:id="@+id/editText_robotName"
android:layout_weight="2" />
<Button
android:text="@string/button_add_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/buttonAdd"
android:layout_weight="1"
android:onClick="addRobot" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5">
<Button
android:text="@string/button_show_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/button_show"
android:layout_weight="1"
android:onClick="showRobots" />
<Button
android:text="@string/button_remove_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/button_remove"
android:layout_weight="1"
android:onClick="removeRobot" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>