0% encontró este documento útil (0 votos)
43 vistas11 páginas

Introducción a Fragments en Android

Android es un sistema operativo basado en Linux con una interfaz de programación Java.

Cargado por

valeriabuzz
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas11 páginas

Introducción a Fragments en Android

Android es un sistema operativo basado en Linux con una interfaz de programación Java.

Cargado por

valeriabuzz
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

16/5/2014 about:blank

Fragments
¿Que son?

Los fragmentos son componentes que se ejecutan en el contexto de una actividad. Los Fragments
permiten encapsular código de la aplicación para que sea más fácil de reutilizar y para soportar
diferentes dispositivos de tamaño.

Los fragmentos tienen su propio ciclo de vida y su propia interfaz de usuario. Se puede definir a
través de los archivos de diseño o por medio de la codificación.

Si una actividad se detiene sus fragmentos también se detendrán, si una actividad es destruida sus
fragmentos también se destruyen.

La clase base para Fragments es [Link]. En casos especiales también se pueden


utilizar las clases más especiales, como ListFragment o DialogFragment.

El método onCreateView () es llamado por Android una vez que el fragmento debe crear su interfaz
de usuario. Aquí se puede inflar un diseño a través de la inflate () llamada al método del objeto Inflater
pasado como parámetro a este método. .

El OnStart () es llamado una vez que el fragmento se pone visible.

Los fragmentos se pueden agregar dinámicamente y quitar de una actividad a través de


FragmentManager. Esto agregará la acción a la pila del historial de la actividad, es decir, lo que
permitirá revertir los cambios Fragmento de la actividad mediante el botón de nuevo.

¿Cuando usarlos?

Los Fragmentos hacen que sea fácil volver a utilizar componentes en diferentes diseños, por
ejemplo, usted puede construir un solo panel de diseños para dispositivos (teléfonos) y multi-panel
de diseños para tablets.

Esto no se limita a las tabletas, por ejemplo, puede usar también para apoyar Fragmentos diseño
diferente para el paisaje y la orientación vertical. Pero a medida que las tabletas ofrecen mucho más
espacio que suelen incluir más puntos de vista en el diseño y Fragmentos hace que sea más fácil.
El ejemplo típico es una lista de elementos en una actividad. En una tableta que ver los detalles de
inmediato en la misma pantalla en el lado derecho si se hace clic sobre el punto. En un terminal que
saltar a una nueva pantalla de detalles. La discusión que sigue se supone que tiene dos fragmentos
(principal y de detalle), pero también puede tener más. También tendremos una actividad principal y
una actividad detallada. En una tablilla de la actividad principal contiene dos fragmentos en su
diseño, en una computadora de mano que sólo contiene el fragmento principal.

Para comprobar si hay un fragmento que puede utilizar el FragmentManager.

DetailFragment fragment = (DetailFragment) getFragmentManager().


findFragmentById([Link].detail_frag);
if (fragment==null || ! [Link]()) {
// start new Activity
}

about:blank 1/11
16/5/2014 about:blank

else {
[Link](...);
}

Para crear diferentes diseños con fragmentos, puede:

Utilice una actividad, que muestra dos fragmentos de tabletas y sólo una en los dispositivos
terminales. En este caso, se cambiarían los fragmentos en la actividad siempre que sea necesario.
Esto requiere que el fragmento no está declarado en el archivo de diseño como tales fragmentos no
se pueden quitar durante la ejecución. También se requiere una actualización de la barra de acción
si la barra de estado de acción depende del fragmento.

Use actividades separadas para albergar cada fragmento en el auricular. Por ejemplo, cuando la
interfaz de usuario de tableta utiliza dos fragmentos en una actividad, utilizar la misma actividad para
dispositivos móviles, pero el suministro de un diseño alternativo que incluye sólo un fragmento.
Cuando tenga que cambiar Fragmentos, iniciar otra actividad que aloja el otro fragmento.

El segundo enfoque es la manera preferible más flexible y en general de la utilización de fragmentos.


En este caso, la actividad principal comprueba si el fragmento de detalle está disponible en el
diseño. Si el fragmento detallado está ahí, la actividad principal dice el fragmento que se debe
actualizarse. Si el fragmento de detalle no está disponible la actividad principal se inicia la actividad
detallada.

Es una buena práctica que los fragmentos no manipulan entre sí. Para este propósito un fragmento
típicamente implementa una interfaz para obtener nuevos datos de su actividad de acogida.

Ejemplo: Uso de Fragment


El siguiente ejemplo muestra cómo utilizar fragmentos. La aplicación utilizará diseños con diferentes
fragmentos en función de retrato y modo de paisaje.

En el modo de retrato RssfeedActivity mostrará un fragmento. A partir de estos fragmentos, el


usuario puede navegar a otra actividad que contiene otro fragmento.

En el modo de paisaje RssfeedActivity mostrará ambos lados Fragmentos del otro.

Creación del proyecto

Crear un nuevo proyecto de Android con los siguientes datos.


Application Name RSS Reader

Project Name [Link]

Package name [Link]..rssfeed

Template BlankActivity
Activity RssfeedActivity

Layout activity_rssfeed

about:blank 2/11
16/5/2014 about:blank

Creación de layout para modo portaretrato

Crear o modificar los archivos de diseño siguientes en el res / layout / carpeta.

Cree un archivo nuevo diseño llamado fragment_rssitem_detail.xml. Este archivo de diseño se usará
por el DetailFragment.

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


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/detailsText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginTop="20dip"
android:text="Default Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="30dip" />

</LinearLayout>

Cree un archivo nuevo diseño llamado fragment_rsslist_overview.xml. Este archivo de diseño se


usará por el MyListFragment.

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


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Press to update"
/>

</LinearLayout>

Cambie el archivo activity_rssfeed.xml existente. Esta disposición será el diseño predeterminado


para RssfeedActivity y muestra dos fragmentos.

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


<LinearLayout xmlns:android="[Link]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

about:blank 3/11
16/5/2014 about:blank

<fragment
android:id="@+id/listFragment"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize"
class="[Link]" >
</fragment>

<fragment
android:id="@+id/detailFragment"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent"
class="[Link]" >
<!-- Preview: layout=@layout/details -->
</fragment>

</LinearLayout>

Creación de las clases Fragment

Crear ahora las clases fragmento. Cree la clase DetailFragment.

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class DetailFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = [Link]([Link].fragment_rssitem_detail,
container, false);
return view;
}

public void setText(String item) {


TextView view = (TextView) getView().findViewById([Link]);
[Link](item);
}
}

Cree la clase MyListFragment. A pesar de su nombre no se mostrará una lista de elementos, que
sólo tendrá un botón que permite enviar la hora actual con el fragmento más detalles.

about:blank 4/11
16/5/2014 about:blank

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class MyListFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = [Link]([Link].fragment_rsslist_overview,
container, false);
Button button = (Button) [Link]([Link].button1);
[Link](new [Link]() {
@Override
public void onClick(View v) {
updateDetail();
}
});
return view;
}

public void updateDetail() {


String newTime = [Link]([Link]());
DetailFragment fragment = (DetailFragment) getFragmentManager()
.findFragmentById([Link]);
if (fragment != null && [Link]()) {
[Link](newTime);
}
}
}

Creación de layout para modo apaisado

El RssfeedActivity debe utilizar un archivos de diseño especiales en el modo vertical. Por esta razón
creamos la res / carpeta de esquema de puerto.

En el modo de retrato Android se compruebe la carpeta de esquemas de puerto para los archivos de
diseño de montaje. Si Android no encuentra un archivo de diseño adecuado se utiliza la carpeta de
presentación.

Por lo tanto, crear el archivo activity_rssfeed.xml siguiente distribución en el res / carpeta de


esquema de puerto.

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


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"

about:blank 5/11
16/5/2014 about:blank

android:orientation="horizontal" >

<fragment
android:id="@+id/listFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize"
class="[Link]" />
</LinearLayout>

También crear el archivo de diseño activity_detail.xml. Este diseño se usará en la DetailActivity. Por
favor, tenga en cuenta que podría haber crear este archivo también en las res / layout carpeta, pero
sólo se utiliza en el modo de retrato de ahí que lo coloque en esta carpeta.

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


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<fragment
android:id="@+id/detailFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="[Link]" />

</LinearLayout>

Actividades

Create a new Activity called DetailActivity with the following class.

import [Link];
import [Link];
import [Link];
import [Link];

public class DetailActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);

if (getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
finish();
return;
}
setContentView([Link].activity_detail);
Bundle extras = getIntent().getExtras();
if (extras != null) {
String s = [Link]("value");
about:blank 6/11
16/5/2014 about:blank

TextView view = (TextView) findViewById([Link]);


[Link](s);
}
}
}

Asegúrese de que usted también registrar esta actividad en el archivo [Link].

Ajuste el ListFragment para mostrar la actividad en caso de que el otro fragmento no está presente
en la composición.

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class MyListFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = [Link]([Link].fragment_rsslist_overview,
container, false);
Button button = (Button) [Link]([Link].button1);
[Link](new [Link]() {
@Override
public void onClick(View v) {
updateDetail();
}
});
return view;
}

public void updateDetail() {


String newTime = [Link]([Link]());
DetailFragment fragment = (DetailFragment) getFragmentManager()
.findFragmentById([Link]);
if (fragment != null && [Link]()) {
[Link](newTime);
} else {
Intent intent = new Intent(getActivity().getApplicationContext(),
[Link]);
[Link]("value", newTime);
startActivity(intent);

}
}
}

about:blank 7/11
16/5/2014 about:blank

Ejecución

Ejecute el ejemplo. Si ejecuta la aplicación en modo de portrait debería ver sólo un fragmento. Utilice
Ctrl + F11 para cambiar la orientación. En el modo horizontal se ven dos fragmentos. Si se pulsa el
botón en el modo de retrato DetailActivity una nueva se inicia y muestra la hora actual. En el modo
horizontal se ve ambos fragmentos.

SQLite
¿Que es?

SQLite es una base de datos de código abierto que está integrado en Android. SQLite compatible
con las características estándar de bases de datos relacionales, como la sintaxis SQL,
transacciones y declaraciones preparadas. Además, sólo requiere un poco de memoria en tiempo
de ejecución (aprox. 250 Kb).

SQLite apoya el texto de los tipos de datos (similar a String en Java), INTEGER (similar a la larga en
Java) y real (similar a hacer doble en Java). Todos los demás tipos se debe convertir en uno de
estos campos antes de guardarlos en la base de datos. SQLite sí mismo no valida si los tipos de
escritos a las columnas son en realidad del tipo definido, por ejemplo, usted puede escribir un
número entero en una columna de cadena y viceversa.

Más información acerca de SQLite se puede encontrar en el sitio web de


SQLite: [Link]

SQLite en Android
SQLite está disponible en todos los dispositivos Android. Utilizando una base de datos SQLite en
Android no requiere ningún tipo de configuración de base de datos o la administración.

Sólo tiene que definir las sentencias SQL para crear y actualizar la base de datos. Posteriormente,
la base de datos se gestiona automáticamente para usted por la plataforma Android.

El acceso a una base de datos SQLite implica acceder al sistema de archivos. Esto puede ser lenta.
Por tanto, se recomienda llevar a cabo las operaciones de base de datos de forma asíncrona, por
ejemplo dentro de la clase AsyncTask.

Si su aplicación crea una base de datos, esta base de datos por defecto se guarda en el directorio
de datos / data / APP_NAME /databases / FILENAME.
Las partes del directorio anterior se construyen sobre la base de las siguientes reglas. DATA es el
camino que el [Link] () devuelve el método. APP_NAME es el nombre de la
aplicación. FILENAME es el nombre que se especifica en el código de aplicación para la base de
datos.

Arquitectura SQLite
Packages

El paquete [Link] contiene todas las clases generales para trabajar con bases de datos.
[Link] contiene las clases SQLite específicos.
about:blank 8/11
16/5/2014 about:blank

SQLiteOpenHelper

Para crear y actualizar una base de datos en su aplicación para Android se utilizar normalmente una
subclase SQLiteOpenHelper. En el constructor de la subclase llamar al método super () de
SQLiteOpenHelper, especificando el nombre de la base y la versión de la base de datos actual.

En esta clase se debe redefinir los métodos onCreate () y onUpgrade ().

onCreate () es llamado por android, si la base de datos no existe.

onUpgrade () se llama, si la versión de la base de datos se incrementa en el código de aplicación.


Este método le permite actualizar el esquema de base de datos.

Ambos métodos reciben un objeto SQLiteDatabase como parámetro que representa la base de
datos.

SQLiteOpenHelper ofrece los métodos getReadableDatabase() y getWriteableDatabase () para


obtener acceso a un objeto SQLiteDatabase, ya sea en modo de lectura o escritura.

Las tablas de bases de datos deben utilizar el identificador _id como clave principal de la tabla.
Varias funciones de Android se basan en este estándar.

SQLiteDatabase

SQLiteDatabase es la clase base para trabajar con una base de datos SQLite en Android y ofrece
métodos para abrir, consultar, actualizar y cerrar la base de datos.

Más específicamente SQLiteDatabase proporciona los métodos insert (), update () y delete ().

Además, proporciona el método execSQL (), que permite ejecutar una sentencia SQL directamente.

Los ​
objeto ContentValues permiten definir claves / valores. La "llave" representa el identificador de
columna de la tabla y el "valor" representa el contenido del registro de la tabla en esta columna.
ContentValues ​puede ser utilizado para las inserciones y actualizaciones de las entradas de la base
de datos.

Las consultas pueden ser creadas a través de la rawQuery () y query () o los métodos a través de la
clase SQLiteQueryBuilder.

rawQuery () acepta directamente una consulta SQL como entrada.

query () proporciona una interfaz estructurada para especificar la consulta SQL.

SQLiteQueryBuilder es una clase de conveniencia que ayuda a construir consultas SQL.

Ejemplo rawQuery()

A continuación se da un ejemplo de una llamada rawQuery ().

Cursor cursor = getReadableDatabase().


rawQuery("select * from todo where _id = ?", new String[] { id });

about:blank 9/11
16/5/2014 about:blank

Ejemplo query()

A continuación se da un ejemplo de una llamada de query ().

return [Link](DATABASE_TABLE,
new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION },
null, null, null, null, null);

El método de query () tiene los siguientes parámetros.

Parámetros del método query()

Parámetros Comentario

String dbName El nombre de la tabla para compilar la


consulta en contra.

int[] columnNames Una lista de columnas de la tabla que


volver. Pasando "null" devolverá todas
las columnas.

String whereClause cláusula where, es decir, filtro para la


selección de datos, null se seleccionan
todos los datos.

String[] selectionArgs Puede incluir “?” en el "whereClause" ".


Estos marcadores de posición será
reemplazado por los valores de la matriz
selectionArgs.

String[] groupBy Un filtro de declarar cómo agrupar filas,


null hará que las filas no se agrupen.

String[] having Filtra los grupos, null significa que no


hay filtro.

String[] orderBy Columnas de la tabla que se utilizará


para ordenar los datos, null significa que
no hay pedido.

Si la condición no es necesario, puede pasar por ejemplo, null, para el grupo por cláusula.

El "whereClause" se especifica sin la palabra "dónde", por ejemplo, un "dónde" declaración podría
ser: "_id = 19 y el resumen =?".
Si especifica valores de marcador de posición en la cláusula donde a través de?, Los pases como
parámetro selectionArgs a la consulta.

Cursor

about:blank 10/11
16/5/2014 about:blank

Una consulta devuelve un objeto Cursor. Un cursor representa el resultado de una consulta y
básicamente apunta a una fila de resultado de la consulta. De esta manera Android puede
amortiguar eficazmente los resultados de la consulta; ya que no tiene que cargar todos los datos en
la memoria.
Para obtener el número de elementos de la consulta resultante utilizar el getCount () método.

Para moverse entre las filas de datos individuales, puede utilizar el MoveToFirst () y MoveToNext ()
métodos. El isAfterLast () permite comprobar si el extremo del resultado de la consulta se ha
alcanzado.

Cursor proporciona escritos métodos get * (), por ejemplo, getLong (columnIndex), getString
(columnIndex) para acceder a los datos de la columna de la posición actual del resultado. El
"columnIndex" es el número de la columna que está accediendo.

Cursor también proporciona la getColumnIndexOrThrow (String) método que permite obtener el


índice de columna de un nombre de columna de la tabla.

Un cursor se debe cerrar con el cierre () llamada al método.

ListView, ListActivity y SimpleCursorAdapter

Listviews son vistas que permiten mostrar una lista de elementos.

ListActivities son las actividades especializadas que hacen que el uso de listviews más fácil.

Para trabajar con bases de datos y listviews puede utilizar las SimpleCursorAdapter. Los
SimpleCursorAdapter permite fijar un modelo para cada fila de las listviews.

También se define una matriz que contiene los nombres de columna y otra matriz que contiene los
identificadores de los puntos de vista que deben ser llenados con los datos.

La clase SimpleCursorAdapter asignará las columnas a las vistas basadas en el Cursor le pasa.

Para obtener el cursor debe usar la clase Loader.

about:blank 11/11

También podría gustarte