XML, ListView e Adapters no Android

Para criar uma lista simples na tela do Android, obtida de um banco de dados ou XML é necessários criar seu layout e então um Adapter para popular esses valores.
Abaixo um exemplo simples que lê um arquivo XML e exibe os valores em uma lista na tela principal.
Para isso crie um projeto Android no Eclipse.
Na pasta /res do seu projeto, crie uma pasta xml e adicione um arquivo XML de nome todolist.xml

Adicione o código abaixo no arquivo criado:

<?xml version="1.0" encoding="UTF-8"?>
<todoitems>
    <item
        title="Alimentar cão"/>
    <item
        title="Churrasco"/>
    <item
        titulo="Ir ao Pub"/>
    <item
        titulo="Tomar banho"/>
</todoitems>

No xml da atividade padrão, localizado na pasta /layout do seu projeto, substitua o código por:

<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"
    tools:context=".MainActivity" >
    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>
</RelativeLayout>

Na activity criada pelo Wizard do Eclipse, adicione o código abaixo:

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

import com.example.listview.adapters.CustomAdapter;

public class MainActivity extends Activity {
    static ArrayList<String> todoItems = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView listview = (ListView) findViewById(R.id.listview);
        final CustomAdapter adapter = new CustomAdapter(this,
                android.R.layout.simple_list_item_1, getResources().getXml(
                        R.xml.todolist));
        listview.setAdapter(adapter);

    }
}

Ao final, adicione o Adapater, que será responsável por adicionar e exibir os valores contidos no arquivo XML:

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.util.Log;
import android.widget.ArrayAdapter;

public class CustomAdapter extends ArrayAdapter<String> {
    public CustomAdapter(Activity a, int textViewResourceId,
            XmlResourceParser xmlParsers) {
        super(a, textViewResourceId, getListFromXml(xmlParsers));

    }

    private static List<String> getListFromXml(XmlResourceParser xmlParser) {
        List<String> todoItems = new ArrayList<String>();
        int eventType = -1;
        while (eventType != XmlResourceParser.END_DOCUMENT) {
            if (eventType == XmlResourceParser.START_TAG) {

                String strNode = xmlParser.getName();
                if (strNode.equals("item")) {
                    todoItems.add(xmlParser.getAttributeValue(null, "titulo"));
                }
            }

            try {
                eventType = xmlParser.next();
            } catch (XmlPullParserException e) {
                Log.e("Teste", e.getMessage());
            } catch (IOException e) {
                Log.e("Teste", e.getMessage());
            }
        }
        return todoItems;
    }
}

O método getListFromXml() lê o arquivo XML e retorna lista dos itens ao construtor da classe ArrayAdapter. Caso isso não aconteça na chamada do super, os valores não irão ser exibidos.
Abraços,
André Rezende

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s