INSTITUTO TECNOLÓGICO SUPERIOR DE
FELIPE CARRILLO PUERTO
Ingeniería En Sistemas Computacionales
Tópicos avanzados de programación
Informe Técnico unidad 5
Profesor:
Niels Henryk Aranda Cuevas
Integrantes:
Irving Saúl Che Canul
AULA: J-4 GRUPO: B
02/07/14
7 - Control ListView
Introducción:
El control ListView a diferencia del Spinner que se cierra luego de seleccionar un elemento
permanecen visibles varios elementos (se lo utiliza cuando hay que mostrar muchos
elementos); Si la lista no entra en el espacio que hemos fijado para el ListView nos permite
hacer scroll de los mismos. El control ListView se encuentra en la pestaña "Compositive".
Problema:
Disponer un ListView con los nombres de paises de sudamérica. Cuando se seleccione un
país mostrar en un TextView la cantidad de habitantes del país seleccionado.
La interfaz visual a implementar es la siguiente (primero disponemos un TextView
(llamado tv1) y un ListView (llamado listView1)):
Código fuente:
package com.javaya.proyecto006;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private String[] paises = { "Argentina", "Chile", "Paraguay",
"Bolivia",
"Peru", "Ecuador", "Brasil", "Colombia",
"Venezuela", "Uruguay" };
private String[] habitantes = { "40000000", "17000000", "6500000",
"10000000", "30000000", "14000000", "183000000",
"44000000",
"29000000", "3500000" };
private TextView tv1;
private ListView lv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.tv1);
lv1 =(ListView)findViewById(R.id.listView1);
ArrayAdapter <String> adapter = new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, paises);
lv1.setAdapter(adapter);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int
posicion, long id) {
tv1.setText("Población de "+
lv1.getItemAtPosition(posicion) + " es "+ habitantes[posicion]);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if
it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Conclusión:
Como hemos podido observar el listview nos sirve para poder visualizar varios elementos
al mismo tiempo un claro ejemplo es definir los vectores paralelos donde almacenamos los
nombres de paises y en el otro almacenamos la cantidad de habitantes de esos países. Se
definen objetos de tipo TextView y ListView, el método oncreate obtenemos las referencias
de los objetos ya creados, uno de los aprendizajes más significativos fue la utilización del
método setOnItemClicListener el cual se implementó en la clase ListView . el método
OnItemClickListener que nos sirva para las interfaces cuando damos click en la listview, en
el método onItemClick modificamos el contenido del TextView con el nombre del país y la
cantidad de habitantes.
8 - Control ImageButton
Introducción:
Es una clase muy similar al listview llamada ImageButton que tiene la misma filosofía de manejo
con la diferencia que puede mostrar una imagen en su superficie.
Problema:
Disponer un objeto de la clase ImageButton que muestre una imagen de un teléfono.
Cuando se presione mostrar en un control TextView el mensaje "Llamando".
Código fuente: package com.javaya.proyecto007;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.tv1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
//Este método se ejecutará cuando se presione el ImageButton
public void llamar(View view) {
tv1.setText("Llamando");
}
}
Conclusión:
El siguiente problema es muy simple ya que es algo muy similar a lo que hemos estado viendo netbeens, cuando creamos botones en la interfaz y agregamos una imagen al botón, al momento de realizar la acción de presionar se debe llamar la imagen en el mismo instante, la parte más importante es inicializar la propiedad OnClick del objeto ib1 con el nombre del método "llamar" (recordemos que esto lo hacemos accediendo a la propiedad On Click en la ventana de "Properties").
9 - Lanzar un segundo "Activity"
Introducción:
Es muy común que una aplicación tenga más de una ventana. Para implementar esto en
Android debemos plantear una segunda clase que también herede de la clase Activity
(tengamos en cuenta que cuando utilizamos ADT automáticamente cuando creamos un
proyecto nos crea el archivo XML y java de la primer Activity); Vamos a ver en este
concepto los pasos que debemos dar para crear otro Activity y como activarlo desde el
Activity principal.
Problema:
Confeccionar un programa que muestre en la ventana principal un botón que al ser
presionado muestre otra ventana (Activity) mostrando un TextView con el nombre del
programador de la aplicación y un botón para cerrar la ventana o actividad.
El código fuente de la actividad principal queda:
package com.javaya.proyecto008;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void lanzar(View view) {
Intent i = new Intent(this, AcercaDe.class );
startActivity(i);
}
}
El código fuente de la actividad AcercaDe queda:
package com.javaya.proyecto008;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class AcercaDe extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acercade);
}
public void cerrar(View view) {
finish();
}
}
Conclusión:
El método Activity hace referencia a una nueva interfaz o una nueva ventana de
vizualizacion, se crea el proyecto que fue la primera actividad y luego la segunda clase que
es la que llamamos como la segunda actividad. En este segundo ejercicio se utiliza oncreate
para crear las ventanas y el onclick para los botones. También agremos un botón al final y
el método finish () que tiene como objetivo cerrar el programa y liberar espacio de
memoria.
10 - Lanzar un segundo "Activity" y pasar parámetros.
Introducción:
Un programa puede tener más de una ventana representando cada ventana con una clase
que hereda de Activity.
Una situación muy común es que la primera 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.
El código fuente de esta Activity es:
package com.androidya.proyecto010;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.et1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void ejecutar(View view) {
Intent i = new Intent(this, Actividad2.class);
i.putExtra("direccion", et1.getText().toString());
startActivity(i);
}
}
Tenemos que crear el archivo Java donde dispondremos la funcionalidad de
la segunda ventana (Activity)
Creamos una nueva clase al proyecto desde el menú contextual(presionamos
el botón derecho del mouse sobre el paquete com.androidya.proyecto010)
Al nombre de la clase la llamamos Actividad2 y debemos especificar que
hereda de la clase android.app.Activity
Ahora tenemos que modificar el archivo Java generado agregando del método
onCreate con esto:
package com.androidya.proyecto010;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
public class Actividad2 extends Activity {
private WebView webView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad2);
webView1 = (WebView) findViewById(R.id.webView1);
Bundle bundle = getIntent().getExtras();
webView1.loadUrl("http://" + bundle.getString("direccion"));
}
public void finalizar(View view) {
finish();
}
}
Conclusión:
Este ejercicio es es parecido al anterior a diferencia de que ahora usamos el webview para
poder acceder a internet desde el apk y los valores agregados a la primera activity para
poder pasarlos a la segunda activity se usó el método getExtras(), podemos notar que
existen líneas de código heredadas para la reutilización de las mismas.
14 - Almacenamiento en una base de datos SQLite
Introducción:
Una herramienta nativa de Android para almacenar datos en una base de datos llamada
SQLite. SQLite es una base de datos Open Source, es muy popular en muchos dispositivos
pequeños, como Android. Las ventajas que presenta utilizar SQLite es que no requiere
configuración, no tiene un servidor de base de datos ejecutándose en un proceso separado y
es relativamente simple su empleo.
Problema:
Confeccionar un programa que permita almacenar los datos de votantes de una elección.
Crear la tabla votantes y definir los campos dni (documento de identidad), nombre del
votante, colegio donde vota y número de mesa donde vota.
El programa debe permitir:
1 - Carga de personas.
2 - Consulta por el dni (para saber donde vota)
3 - Borrado de personas
4 - Modificación de datos.
En nuestro problema implementaremos una nueva clase llamada
AdminSQLiteOpenHelper que herede de la clase SQLiteOpenHelper:
package com.javaya.proyecto015;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class AdminSQLiteOpenHelper extends SQLiteOpenHelper {
public AdminSQLiteOpenHelper(Context context, String nombre,
CursorFactory factory, int version) {
super(context, nombre, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table votantes(dni integer primary key, nombre
text, colegio text, nromesa integer)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int versionAnte, int
versionNue) {
db.execSQL("drop table if exists votantes");
db.execSQL("create table votantes(dni integer primary key, nombre
text, colegio text, nromesa integer)");
}
}
Ahora veamos la otra clase que implementará las altas, bajas,
modificaciones y consultas:
package com.javaya.proyecto015;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et1, et2, et3, et4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
et3 = (EditText) findViewById(R.id.editText3);
et4 = (EditText) findViewById(R.id.editText4);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void alta(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String dni = et1.getText().toString();
String nombre = et2.getText().toString();
String colegio = et3.getText().toString();
String nromesa = et4.getText().toString();
ContentValues registro = new ContentValues();
registro.put("dni", dni);
registro.put("nombre", nombre);
registro.put("colegio", colegio);
registro.put("nromesa", nromesa);
bd.insert("votantes", null, registro);
bd.close();
et1.setText("");
et2.setText("");
et3.setText("");
et4.setText("");
Toast.makeText(this, "Se cargaron los datos de la persona",
Toast.LENGTH_SHORT).show();
}
public void consulta(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String dni = et1.getText().toString();
Cursor fila = bd.rawQuery(
"select nombre,colegio,nromesa from votantes where dni="
+ dni, null);
if (fila.moveToFirst()) {
et2.setText(fila.getString(0));
et3.setText(fila.getString(1));
et4.setText(fila.getString(2));
} else
Toast.makeText(this, "No existe una persona con dicho dni",
Toast.LENGTH_SHORT).show();
bd.close();
}
public void baja(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String dni = et1.getText().toString();
int cant = bd.delete("votantes", "dni=" + dni, null);
bd.close();
et1.setText("");
et2.setText("");
et3.setText("");
et4.setText("");
if (cant == 1)
Toast.makeText(this, "Se borró la persona con dicho
documento",
Toast.LENGTH_SHORT).show();
else
Toast.makeText(this, "No existe una persona con dicho
documento",
Toast.LENGTH_SHORT).show();
}
public void modificacion(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String dni = et1.getText().toString();
String nombre = et2.getText().toString();
String colegio = et3.getText().toString();
String nromesa = et4.getText().toString();
ContentValues registro = new ContentValues();
registro.put("nombre", nombre);
registro.put("colegio", colegio);
registro.put("nromesa", nromesa);
int cant = bd.update("votantes", registro, "dni=" + dni, null);
bd.close();
if (cant == 1)
Toast.makeText(this, "se modificaron los datos",
Toast.LENGTH_SHORT)
.show();
else
Toast.makeText(this, "no existe una persona con dicho
documento",
Toast.LENGTH_SHORT).show();
}
}
Conclusión:
Una base de datos es una colección de datos organizados, en android encontramos el sistema de sqlite esta herramienta en Android es muy fácil y sencilla para utilizar, además como ya se había mencionado es nativa de android, en sqlite encontramos el método SQLiteOpenHelper que es el que nos permite crear la base de datos, usamos ahora los métodos onCreate y onUpgrade. Como ya vimos oncreate nos sirve para crear un constructor y onupgrade nos sirve para actualizarlas.