Tutorial de implementación de ListView en ActionBarSherlock Fragment Tabs

Tutorial de implementación de ListView en ActionBarSherlock Fragment Tabs

En este tutorial, aprenderá cómo implementar vistas de lista en sus pestañas de fragmentos de ActionBarSherlock. Las pestañas de fragmentos permiten al usuario navegar entre fragmentos seleccionando el indicador de pestaña apropiado disponible en la parte superior de la pantalla. Crearemos vistas de lista en las pestañas de fragmentos utilizando la biblioteca ActionBarSherlock y, al hacer clic en el elemento de la vista de lista, se mostrarán los resultados en una nueva actividad. Vamos a empezar…

Comience este tutorial importando su  biblioteca ActionBarSherlock  en su Eclipse. Agregue la  biblioteca ActionBarSherlock a su proyecto.

Cree un nuevo proyecto en Eclipse  File  >  New  >  Android Application Project. Complete los detalles y nombre su proyecto  ABSListViewFragmentTabs.

Nombre de la aplicación:  ABSListViewFragmentTabs

Nombre del proyecto:  ABSListViewFragmentTabs

Nombre del paquete:  com.androidbegin. abslistviewfragmenttabs

Abra su  MainActivity .java  y pegue los siguientes códigos.

Actividad principal .java

paquete com.androidbegin.abslistviewfragmenttabs;

importar com.actionbarsherlock.app.SherlockFragmentActivity;

importar android.support.v4.app.FragmentTabHost;
importar android.os.Bundle;

clase pública MainActivity extiende SherlockFragmentActivity {
	// Declarar Variables	
	privado FragmentTabHost mTabHost;

	@Anular
	Vacío protegido onCreate (Paquete de estado de instancia guardado) {
		super.onCreate(estadoDeInstanciaGuardado);
		// Establecer la vista desde main_fragment.xml
		setContentView(R.layout.main_fragment);

		// Localice android.R.id.tabhost en main_fragment.xml
		mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);

		// Crea las pestañas en main_fragment.xml
		mTabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent);

		// Crear Tab1 con una imagen personalizada en la carpeta res
		mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("", getResources().getDrawable(R.drawable.tab1)),
				FragmentTab1.clase, nulo);

		// Crear Tab2
		mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"),
				FragmentTab2.class, nulo);

		}
}

Hemos creado 2 pestañas con FragmentTabHost y, al seleccionar la pestaña adecuada, se mostrarán diferentes vistas de lista.

A continuación, cree un diseño gráfico para MainActivity que muestre FragmentTabHost. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  > Archivo XML de Android

Nombre su nuevo archivo XML  main_fragment.xml  y pegue los siguientes códigos.

fragmento_principal .xml

<LinearLayout xmlns_android="http://schemas.android.com/apk/res/android"
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android:orientación="vertical" >

    <android.support.v4.app.FragmentTabHost
        android_id="@android:id/tabhost"
        android_layout_width="match_parent"
        android_layout_height="match_parent" >

        <FrameLayout
            android_id="@+id/contenido de tabulación"
            android_layout_width="match_parent"
            android_layout_height="match_parent" />
    </android.support.v4.app.FragmentTabHost>

</LinearLayout>

Luego, crea una clase para  FragmentTab1 . Vaya a  Archivo  >  Nuevo  >  Clase  y asígnele el nombre  FragmentTab1 .java. Seleccione su paquete llamado  com.androidbegin. abslistviewfragmenttabs  y haga clic en  Finalizar .

Abra su  FragmentTab1 .java  y pegue los siguientes códigos.

FragmentTab1 .java

paquete com.androidbegin.abslistviewfragmenttabs;

importar com.actionbarsherlock.app.SherlockFragment;

importar android.content.Intent;
importar android.os.Bundle;
importar android.view.LayoutInflater;
importar android.view.View;
importar android.view.ViewGroup;
importar android.widget.AdapterView;
importar android.widget.AdapterView.OnItemClickListener;
importar android.widget.ListView;

clase pública FragmentTab1 extiende SherlockFragment {
	Cadena[] rango;
	Cadena[] país;
	Cadena [] población;
	bandera int[];
	Lista de vista de lista;
	Adaptador ListViewAdapter;

	@Anular
	Public View onCreateView(LayoutInflater inflater, contenedor ViewGroup,
			Paquete guardadoInstanceState) {
		Ver rootView = inflater.inflate(R.layout.fragmenttab1, container,
				falso);
		// Generar datos de muestra
		rango = nuevo String[] { "1", "2", "3", "4", "5" };

		país = new String[] { "China", "India", "Estados Unidos",
				"Indonesia", "Brasil" };

		población = new String[] { "1,354,040,000", "1,210,193,422",
				"315.761.000", "237.641.326", "193.946.886" };

		flag = new int[] { R.dibujable.china, R.dibujable.india,
				R.dibujable.estadosunidos, R.dibujable.indonesia,
				R.dibujable.brasil };

		// Localice ListView en fragmenttab1.xml
		lista = (ListView) rootView.findViewById(R.id.listview);

		// Pasar los resultados a la clase ListViewAdapter
		adaptador = new ListViewAdapter(getActivity(), rango, país, población,
				bandera);
		// Vincula el adaptador a ListView
		list.setAdapter(adaptador);
		// Capturar clics en elementos de ListView
		list.setOnItemClickListener(nuevo OnItemClickListener() {

			@Anular
			public void onItemClick(AdapterView<?> parent, View view,
					posición int, identificación larga) {
				// Enviar datos de clics de un solo elemento a la clase SingleItemView
				Intent i = new Intent(getActivity(), SingleItemView.class);
				// Pasar todo el rango de datos
				i.putExtra("rango", rango);
				// Pasar todos los datos del país
				i.putExtra("país", país);
				// Pasar toda la población de datos
				i.putExtra("poblacion", poblacion);
				// Pasar todos los indicadores de datos
				i.putExtra("bandera", bandera);
				// Pasar una sola posición
				i.putExtra("posición", posición);
				// Abrir SingleItemView.java Actividad
				iniciarActividad(i);
			}

		});
		volver rootView;
	}

}

En FragmentTab1, hemos creado una vista de lista y algunos datos de muestra en una matriz de cadenas y enteros. Luego, los datos se pasan a una  clase ListViewAdapter  para mostrarlos en la vista de lista. Un clic en el elemento de vista de lista pasará los datos seleccionados y la posición a una nueva actividad.

A continuación, cree un diseño gráfico para FragmentTab1 que muestre la vista de lista. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  > Archivo XML de Android

Nombre su nuevo archivo XML  fragmenttab1.xml  y pegue los siguientes códigos.

fragmenttab1 .xml

<?versión xml="1.0" codificación="utf-8"?>
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    android_layout_width="fill_parent"
    android_layout_height="fill_parent" >

    <ListView
        android_id="@+id/vista de lista"
        android_layout_width="fill_parent"
        android_layout_height="fill_parent" />

</RelativeLayout>

Luego, crea una clase para  FragmentTab2 . Vaya a  Archivo  >  Nuevo  >  Clase  y asígnele el nombre  FragmentTab1 .java. Seleccione su paquete llamado  com.androidbegin. abslistviewfragmenttabs  y haga clic en  Finalizar .

Abra su  FragmentTab2 .java  y pegue los siguientes códigos.

FragmentTab2 .java

paquete com.androidbegin.abslistviewfragmenttabs;

importar com.actionbarsherlock.app.SherlockFragment;

importar android.content.Intent;
importar android.os.Bundle;
importar android.view.LayoutInflater;
importar android.view.View;
importar android.view.ViewGroup;
importar android.widget.AdapterView;
importar android.widget.ListView;
importar android.widget.AdapterView.OnItemClickListener;

clase pública FragmentTab2 extiende SherlockFragment {
	Cadena[] rango;
	Cadena[] país;
	Cadena [] población;
	bandera int[];
	Lista de vista de lista;
	Adaptador ListViewAdapter;

	@Anular
	Public View onCreateView(LayoutInflater inflater, contenedor ViewGroup,
			Paquete guardadoInstanceState) {
		Ver rootView = inflater.inflate(R.layout.fragmenttab2, container,
				falso);
		// Generar datos de muestra
		rango = nuevo String[] { "6", "7", "8", "9", "10" };

		país = new String[] { "Pakistán", "Nigeria", "Bangladesh", "Rusia",
				"Japón" };

		población = new String[] { "182 912 000", "170 901 000",
				"152 518 015", "143 369 806", "127 360 000" };

		flag = new int[] { R.dibujable.pakistán, R.dibujable.nigeria,
				R.dibujable.bangladesh, R.dibujable.rusia, R.dibujable.japón };

		// Localice ListView en fragmenttab2.xml
		lista = (ListView) rootView.findViewById(R.id.listview);

		// Pasar los resultados a la clase ListViewAdapter
		adaptador = new ListViewAdapter(getActivity(), rango, país, población,
				bandera);
		// Vincula el adaptador a ListView
		list.setAdapter(adaptador);
		// Capturar clics en elementos de ListView
		list.setOnItemClickListener(nuevo OnItemClickListener() {

			@Anular
			public void onItemClick(AdapterView<?> parent, View view,
					posición int, identificación larga) {
				// Enviar datos de clics de un solo elemento a la clase SingleItemView
				Intent i = new Intent(getActivity(), SingleItemView.class);
				// Pasar todo el rango de datos
				i.putExtra("rango", rango);
				// Pasar todos los datos del país
				i.putExtra("país", país);
				// Pasar toda la población de datos
				i.putExtra("poblacion", poblacion);
				// Pasar todos los indicadores de datos
				i.putExtra("bandera", bandera);
				// Pasar una sola posición
				i.putExtra("posición", posición);
				// Abrir SingleItemView.java Actividad
				iniciarActividad(i);
			}

		});
		volver rootView;
	}

}

En FragmentTab2, hemos creado una vista de lista y algunos datos de muestra en una matriz de cadenas y enteros. Luego, los datos se pasan a una  clase ListViewAdapter  para mostrarlos en la vista de lista. Un clic en el elemento de vista de lista pasará los datos seleccionados y la posición a una nueva actividad.

A continuación, cree un diseño gráfico para FragmentTab2 que muestre la vista de lista. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  > Archivo XML de Android

Nombre su nuevo archivo XML  fragmenttab2.xml  y pegue los siguientes códigos.

fragmenttab2 .xml

<?versión xml="1.0" codificación="utf-8"?>
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    android_layout_width="fill_parent"
    android_layout_height="fill_parent" >

    <ListView
        android_id="@+id/vista de lista"
        android_layout_width="fill_parent"
        android_layout_height="fill_parent" />

</RelativeLayout>

A continuación, cree una clase para  ListViewAdapter . Vaya a  Archivo  >  Nuevo  >  Clase  y asígnele el nombre  ListViewAdapter .java. Seleccione su paquete llamado  com.androidbegin. abslistviewfragmenttabs  y haga clic en  Finalizar .

Abra su  ListViewAdapter .java  y pegue los siguientes códigos.

ListViewAdapter .java

paquete com.androidbegin.abslistviewfragmenttabs;

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

clase pública ListViewAdapter extiende BaseAdapter {

	// Declarar Variables
	contexto contexto;
	Cadena[] rango;
	Cadena[] país;
	Cadena [] población;
	bandera int[];
	LayoutInflater inflador;

	ListViewAdapter público (contexto contextual, rango de cadena [], país de cadena [],
			String[] población, int[] bandera) {
		este.contexto = contexto;
		this.rango = rango;
		este.país = país;
		esta.poblacion = poblacion;
		esta.bandera = bandera;
	}

	public int getCount() {
		return rango.longitud;
	}

	objeto público getItem (posición int) {
		devolver nulo;
	}

	getItemId largo público (posición int) {
		devolver 0;
	}

	public View getView (posición int, View convertView, ViewGroup parent) {

		// Declarar Variables
		TextView txtrank;
		TextView txtpaís;
		TextView txtpoblación;
		ImageView imgflag;

		inflador = (LayoutInflater) contexto
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		Ver itemView = inflater.inflate(R.layout.listview_item, parent, false);

		// Localice las vistas de texto en listview_item.xml
		txtrank = (TextView) itemView.findViewById(R.id.rank);
		txtcountry = (TextView) itemView.findViewById(R.id.country);
		txtpopulation = (TextView) itemView.findViewById(R.id.population);
		// Localice ImageView en listview_item.xml
		imgflag = (ImageView) itemView.findViewById(R.id.flag);

		// Captura la posición y configura las TextViews
		txtrank.setText(rango[posición]);
		txtpaís.setText(país[posición]);
		txtpoblacion.setText(poblacion[posicion]);

		// Captura la posición y establece en ImageView
		imgflag.setImageResource(bandera[posición]);

		volver itemView;
	}
}

En este ListViewAdapter, los textos y las imágenes se completan en la vista de lista seguidos de las posiciones.

Hemos preparado algunas imágenes de muestra para este tutorial. Pon tus imágenes de muestra descargadas en tu  res  >  drawable-hdpi.

Imágenes de muestra

[etiqueta wpfilebase = ID de archivo = 35 tpl = botón de descarga /]

A continuación, cree un diseño gráfico para los elementos ListView. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  > Archivo XML de Android

Nombre su nuevo archivo XML  listview_item.xml  y pegue los siguientes códigos.

vista_de_lista_elemento .xml

<?versión xml="1.0" codificación="utf-8"?>
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    android_layout_width="fill_parent"
    android_layout_height="fill_parent" >

    <Vista de texto
        android_id="@+id/etiqueta de clasificación"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="@cadena/etiqueta de clasificación" />

    <Vista de texto
        android_id="@+id/rango"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_toRightOf="@+id/ranklabel" />

    <Vista de texto
        android_id="@+id/etiqueta del país"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/ranklabel"
        android_text="@cadena/etiqueta del país" />

    <Vista de texto
        android_id="@+id/país"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/rango"
        android_layout_toRightOf="@+id/etiqueta del país" />

    <Vista de texto
        android_id="@+id/etiqueta de población"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/etiqueta del país"
        android_text="@cadena/etiqueta de población" />

    <Vista de texto
        android_id="@+id/población"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/país"
        android_layout_toRightOf="@+id/etiqueta de población" />

    <ImagenVista
        android_id="@+id/bandera"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentRight="verdadero"
        androide_fondo="#000000"
        Android: relleno = "1dp" />

</RelativeLayout>

A continuación, cree una clase para  SingleItemView . Vaya a  Archivo  >  Nuevo  >  Clase  y asígnele el nombre  SingleItemView .java. Seleccione su paquete llamado  com.androidbegin. abslistviewfragmenttabs  y haga clic en  Finalizar .

Abra su  SingleItemView .java  y pegue los siguientes códigos.

Vista de elemento único .java

paquete com.androidbegin.abslistviewfragmenttabs;

importar android.app.Actividad;
importar android.content.Intent;
importar android.os.Bundle;
importar android.widget.ImageView;
importar android.widget.TextView;

La clase pública SingleItemView extiende la actividad {
    // Declarar Variables
    TextView txtrank;
    TextView txtpaís;
    TextView txtpoblación;
    ImageView imgflag;
    Cadena[] rango;
    Cadena[] país;
    Cadena [] población;
    bandera int[];
    posición int;

    @Anular
    public void onCreate (Paquete guardadoInstanceState) {
        super.onCreate(estadoDeInstanciaGuardado);
        setContentView(R.layout.singleitemview);
        // Recuperar datos de MainActivity en el evento de clic en el elemento
        Intención i = getIntent();
        // Obtener una sola posición
        posición = i.getExtras().getInt("posición");
        // Obtener la lista de rango
        rango = i.getStringArrayExtra("rango");
        // Obtener la lista de países
        país = i.getStringArrayExtra("país");
        // Obtener la lista de población
        población = i.getStringArrayExtra("población");
        // Obtener la lista de banderas
        bandera = i.getIntArrayExtra("bandera");

        // Localiza las vistas de texto en singleitemview.xml
        txtrank = (TextView) findViewById(R.id.rank);
        txtcountry = (TextView) findViewById(R.id.country);
        txtpopulation = (TextView) findViewById(R.id.population);

        // Localice ImageView en singleitemview.xml
        imgflag = (ImageView) findViewById(R.id.flag);

        // Cargar el texto en TextViews seguido de la posición
        txtrank.setText(rango[posición]);
        txtpaís.setText(país[posición]);
        txtpoblacion.setText(poblacion[posicion]);

        // Cargar la imagen en ImageView seguido de la posición
        imgflag.setImageResource(bandera[posición]);
    }
}

Al hacer clic en el elemento de vista de lista, los datos se pasan de los fragmentos a la clase SingleItemView.java. Luego, los resultados se configuran en las vistas de texto y las vistas de imagen.

A continuación, cree un diseño gráfico para SingleItemView. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  > Archivo XML de Android

Nombre su nuevo archivo XML  singleitemview.xml  y pegue los siguientes códigos.

vista de elemento único .xml

<?versión xml="1.0" codificación="utf-8"?>
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    xmlns_herramientas="http://esquemas.android.com/herramientas"
    android_layout_width="fill_parent"
    android_layout_height="fill_parent" >

    <Vista de texto
        android_id="@+id/etiqueta de clasificación"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="@cadena/etiqueta de clasificación" />

    <Vista de texto
        android_id="@+id/rango"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_toRightOf="@+id/ranklabel" />

    <Vista de texto
        android_id="@+id/etiqueta del país"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/ranklabel"
        android_text="@cadena/etiqueta del país" />

    <Vista de texto
        android_id="@+id/país"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/rango"
        android_layout_toRightOf="@+id/etiqueta del país" />

    <Vista de texto
        android_id="@+id/etiqueta de población"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/etiqueta del país"
        android_text="@cadena/etiqueta de población" />

    <Vista de texto
        android_id="@+id/población"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/país"
        android_layout_toRightOf="@+id/etiqueta de población" />

    <ImagenVista
        android_id="@+id/bandera"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentRight="verdadero"
        androide_fondo="#000000"
        Android: relleno = "1dp" />

</RelativeLayout>

A continuación, cambie el nombre y los textos de la aplicación. Abra su  strings.xml  en su carpeta  res > valores  y pegue los siguientes códigos.
cadenas.xml

<recursos>

    <string name="app_name">Tutorial de pestañas de fragmentos de ListView de ABS</string>
    <string name="hello_world">¡Hola mundo!</string>
    <string name="menu_settings">Configuración</string>
    <string name="ranklabel">"Clasificación: "</string>
    <string name="countrylabel">"País: "</string>
    <string name="populationlabel">"Población: "</string>

</recursos>

En su  AndroidManifest.xml , debemos declarar una actividad para  SingleItemView.java . Abra su  AndroidManifest.xml  y pegue los siguientes códigos.

<manifiesto xmlns_android="http://schemas.android.com/apk/res/android"
    paquete="com.androidbegin.abslistviewfragmenttabs"
    android_versionCode="1"
    android_versionName="1.0" >

    <usos-sdk
        android_minSdkVersion="1"
        android_targetSdkVersion="15" />

    <aplicación
        android_icono="@dibujable/ic_launcher"
        android_etiqueta="@cadena/nombre_aplicación"
        android_tema="@estilo/Tema.Sherlock" >
        <actividad android_name=".MainActivity" >
            <intent-filter>
                <acción android_name="android.intent.action.MAIN" />

                <categoría android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </actividad>
        <actividad android_name=".SingleItemView" >
        </actividad>
    </aplicación>

</manifiesto>

Producción:

ABS ListView Fragment Tabs Capturas de pantalla

Código fuente  

[purchase_link id=”7987″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]