Android

14 out, 2016

Xamarin Android – ListView – Usando uma ListActivity (e nada mais…)

Publicidade

Neste artigo, vou mostrar como incluir informações em um controle ListView usando a classe ListActivity em uma aplicação Xamarin Android.

De maneira geral, para adicionar linhas a um ListView, precisamos incluí-lo em nosso Layout e implementar um IListAdapter com os métodos que o ListView chama para se autopreencher.

Existe uma forma bem simples de exibir informações em um ListView em aplicações Xamarin Android sem precisar de um arquivo de Layout .axml.

O Xamarin Android disponibiliza as classes ListActivity e ListAdapter que você pode usar sem ter que definir qualquer arquivo de Layout XML ou código.

A classe ListActivity cria automaticamente um ListView e expõe a propriedade ListAdapter que podemos usar para preencher as linhas da view com as informações a serem exibidas. Os adaptadores embutidos utilizam o Resource ID com um parâmetro sendo usado para cada linha; assim, você não precisa criar o seu layout para usar o ListView nessa abordagem.

list-1

Tudo o que você precisa fazer é:

  • Criar a classe de código da sua Activity herdando de ListActivity;
  • Definir a lista de itens a serem exibidos no ListView;
  • Atribuir à propriedade ListAdatper os itens a serem exibidos;

Vejamos a seguir um exemplo prático dessa abordagem.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS; ela é grátis e é equivalente à versão Professional.

Criando o projeto no Visual Studio 2015 Community

Abra o VS 2015 Community e clique em New Project.

Selecione a linguagem Visual C# e o template Android -> Blank App(Android).

Informe o nome App.UsandoListActiviy e clique no botão OK.

Abra o arquivo MainActivity.cs e inclua o código abaixo substituindo o código existente:

using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using System;

namespace App.UsandoListActivity
{
    [Activity(Label = "App.UsandoListActivity", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : ListActivity
    {
        //declarando um array de strings
        string[] items;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);        

            //definindo os itens a serem exibidos 
            items = new string[] { "Visual Basic", "VB .NET", "Visual C#", "Xamarin", "Android", "JavaScript" };

            //atribuindo os valores ao ListAdapter
            ListAdapter = new ArrayAdapter<String>(this, Android.Resource.Layout.SimpleListItem1, items);
        }

        //tratando o evento Click do ListView
        protected override void OnListItemClick(ListView l, View v, int position, long id)
        {
            var t = items[position];
            Android.Widget.Toast.MakeText(this, t, Android.Widget.ToastLength.Short).Show();
        }
    }
}

Esse singelo código fala por si. Nele, definimos um array de strings que foram preenchidas com alguns valores.

A seguir, atribuímos esses valores à propriedade ListAdapter usando um ArrayAdapter, no qual usamos um leiaute de linha existente chamado SimpleListItem1, que representa uma única linha de texto para definir a aparência do ListView. Esse layout de item contém um único TextView, permitindo exibir uma única linha de texto.

Nota: Existem diversos layouts de itens de lista incorporados ao Xamarin.Android, como SimpleListItem2, TwoLineListItem, ActivityListItem, SimpleListItem2, TestListItem etc.

ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, items);

Os argumentos usados são:

  • O primeiro argumento é this:  é o contexto da aplicação;
  • O segundo argumento é o leiaute definido no arquivo XML que possui o TextView para cada item do array. Estamos usando SimpleListItem1;
  • O terceiro argumento é o array de strings que será usado para preencher o texto da view.

Finalmente, realizamos o tratamento do evento Click do ListView de forma que ao clicar em um item do controle será exibido um aviso com o nome do item selecionado.

Observe que não precisamos usar o método SetContentView para definir um arquivo de layout XML vinculado à nossa Activity, visto que a classe ListActivity nos fornece uma ListView.

Executando o projeto, iremos obter o seguinte resultado:

list-2

Aqui vemos o ListView exibindo as informações e o aviso indicando que selecionamos o item VB .NET.

Mas e se você quiser fornecer um ListView customizado para exibir os itens?

Podemos também fornecer um ListView customizado para exibir os itens.

Para isso, basta definir no arquivo de layout .axml o controle ListView com a sua customização e, o mais importante, fornecer o nome para o controle como @android:id/list.

Para o exemplo acima, abra abra o arquivo Main.axml na pasta Resources/layout e no modo Designer inclua um controle TextView(Medium) com o texto “Linguagens de Programação”;  inclua também um controle ListView a partir da ToolBox e defina a sua propriedade id como segue:

id = @android:id/list

Abaixo, vemos o leiaute no emulador do Xamarin exibindo a tela e o respectivo código XML gerado:

list-3

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#6d6169"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="Linguagens de Programação"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@android:id/list" />
</LinearLayout>

É importante frisar que a propriedade id do controle deve ser definida como @android:id/list.

Após isso, altere o código do arquivo MainActivity.cs conforme abaixo, incluindo a linha em azul, onde usamos o método SetContentView() para definir o arquivo de layout:

using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using System;

namespace App.UsandoListActivity
{
    [Activity(Label = "App.UsandoListActivity", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : ListActivity
    {
        //declarando um array de strings
        string[] items;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);        

            SetContentView(Resource.Layout.Main)

            //definindo os itens a serem exibidos 
            items = new string[] { "Visual Basic", "VB .NET", "Visual C#", "Xamarin", "Android", "JavaScript" };

            //atribuindo os valores ao ListAdapter
            ListAdapter = new ArrayAdapter<String>(this, Android.Resource.Layout.SimpleListItem1, items);
        }

        //tratando o evento Click do ListView
        protected override void OnListItemClick(ListView l, View v, int position, long id)
        {
            var t = items[position];
            Android.Widget.Toast.MakeText(this, t, Android.Widget.ToastLength.Short).Show();
        }
    }
}

Executando agora o projeto, iremos obter:

list-4

Simples assim…

Pegue o projeto completo aqui: App.UsandoListActivity.zip (sem as referências)