Xamarin.Android ListView

ListView é um componente importante da interface do usuário de aplicativos Android; Ele é usado em todos os lugares, desde pequenas listas de opções de menu até longas listas de contatos ou favoritos da Internet. Ele fornece uma maneira simples de apresentar uma lista de rolagem de linhas que podem ser formatadas com um estilo interno ou personalizadas extensivamente.

Visão geral

Modos de exibição de lista e adaptadores estão incluídos nos blocos de construção mais fundamentais dos aplicativos Android. A ListView classe fornece uma maneira flexível de apresentar dados, seja um menu curto ou uma longa lista de rolagem. Ele fornece recursos de usabilidade como rolagem rápida, índices e seleção única ou múltipla para ajudá-lo a criar interfaces de usuário compatíveis com dispositivos móveis para seus aplicativos. A instância ListView requer um Adaptador para fornecer a ela dados contidos nas exibições de linha.

Este guia explica como implementar ListView e as várias Adapter classes no Xamarin.Android. Ele também demonstra como personalizar a aparência de um ListView, e discute a importância da reutilização de linha para reduzir o consumo de memória. Há também alguma discussão sobre como o ciclo de vida da atividade afeta ListView e Adapter usa. Se você estiver trabalhando em aplicativos multiplataforma com o Xamarin.iOS, o ListView controle é estruturalmente semelhante ao iOS UITableView (e o Android Adapter é semelhante ao UITableViewSource).

Primeiro, um pequeno tutorial apresenta o ListView com um exemplo de código básico. Em seguida, links para tópicos mais avançados são fornecidos para ajudá-lo a usar ListView em aplicativos do mundo real.

Observação

O RecyclerView widget é uma versão mais avançada e flexível do ListView. Como RecyclerView foi projetado para ser o sucessor de ListView (e GridView), recomendamos que você use RecyclerView em vez de para o desenvolvimento de ListView novos aplicativos. Para obter mais informações, consulte RecyclerView.

Tutorial de ListView

ListView é um ViewGroup que cria uma lista de itens roláveis. Os itens da lista são inseridos automaticamente na lista usando um IListAdapterarquivo .

Neste tutorial, você criará uma lista rolável de nomes de país/região que são lidos de uma matriz de cadeia de caracteres. Quando um item de lista é selecionado, uma mensagem do sistema exibirá a posição do item na lista.

Inicie um novo projeto chamado HelloListView.

Crie um arquivo XML chamado list_item.xml e salve-o dentro da pasta Resources/Layout/ . Inserir o seguinte:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp">
</TextView>

Esse arquivo define o layout para cada item que será colocado no ListView.

Abra MainActivity.cs e modifique a classe para estender ListActivity (em vez de Activity):

public class MainActivity : ListActivity
{

Insira o seguinte código para o OnCreate()método ):

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    ListAdapter = new ArrayAdapter<string> (this, Resource.Layout.list_item, countries);

    ListView.TextFilterEnabled = true;

    ListView.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs args)
    {
        Toast.MakeText(Application, ((TextView)args.View).Text, ToastLength.Short).Show();
    };
}

Observe que isso não carrega um arquivo de layout para a Atividade (o que você geralmente faz com SetContentView(int))). Em vez disso, defina o ListAdapter propriedade adiciona automaticamente um ListView para preencher toda a ListActivitytela do . Esse método usa um ArrayAdapter<T>, que gerencia a matriz de itens de lista que serão colocados no ListView. O ArrayAdapter<T> O construtor pega o aplicativo Context, a descrição do layout para cada item de lista (criado na etapa anterior) e um T[] ou Java.Util.IList<T> matriz de objetos a serem inseridos no ListView (definido a seguir).

O TextFilterEnabled ativa a filtragem de texto para o ListView, de modo que, quando o usuário começar a digitar, a lista será filtrada.

O ItemClick pode ser usado para inscrever manipuladores para cliques. Quando um item no ListView é clicado, o manipulador é chamado e um Toast é exibida, usando o texto do item clicado.

Você pode usar designs de item de lista fornecidos pela plataforma em vez de definir seu próprio arquivo de layout para o ListAdapter. Por exemplo, tente usar Android.Resource.Layout.SimpleListItem1 em vez de Resource.Layout.list_item.

Adicione a instrução using a seguir:

using System;

Em seguida, adicione a seguinte matriz de cadeia de caracteres como membro de MainActivity:

static readonly string[] countries = new String[] {
    "Afghanistan","Albania","Algeria","American Samoa","Andorra",
    "Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina",
    "Armenia","Aruba","Australia","Austria","Azerbaijan",
    "Bahrain","Bangladesh","Barbados","Belarus","Belgium",
    "Belize","Benin","Bermuda","Bhutan","Bolivia",
    "Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory",
    "British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi",
    "Cote d'Ivoire","Cambodia","Cameroon","Canada","Cape Verde",
    "Cayman Islands","Central African Republic","Chad","Chile","China",
    "Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo",
    "Cook Islands","Costa Rica","Croatia","Cuba","Cyprus","Czech Republic",
    "Democratic Republic of the Congo","Denmark","Djibouti","Dominica","Dominican Republic",
    "East Timor","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea",
    "Estonia","Ethiopia","Faeroe Islands","Falkland Islands","Fiji","Finland",
    "Former Yugoslav Republic of Macedonia","France","French Guiana","French Polynesia",
    "French Southern Territories","Gabon","Georgia","Germany","Ghana","Gibraltar",
    "Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guinea","Guinea-Bissau",
    "Guyana","Haiti","Heard Island and McDonald Islands","Honduras","Hong Kong","Hungary",
    "Iceland","India","Indonesia","Iran","Iraq","Ireland","Israel","Italy","Jamaica",
    "Japan","Jordan","Kazakhstan","Kenya","Kiribati","Kuwait","Kyrgyzstan","Laos",
    "Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg",
    "Macau","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands",
    "Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova",
    "Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia",
    "Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand",
    "Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Marianas",
    "Norway","Oman","Pakistan","Palau","Panama","Papua New Guinea","Paraguay","Peru",
    "Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar",
    "Reunion","Romania","Russia","Rwanda","Sqo Tome and Principe","Saint Helena",
    "Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon",
    "Saint Vincent and the Grenadines","Samoa","San Marino","Saudi Arabia","Senegal",
    "Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands",
    "Somalia","South Africa","South Georgia and the South Sandwich Islands","South Korea",
    "Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden",
    "Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","The Bahamas",
    "The Gambia","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey",
    "Turkmenistan","Turks and Caicos Islands","Tuvalu","Virgin Islands","Uganda",
    "Ukraine","United Arab Emirates","United Kingdom",
    "United States","United States Minor Outlying Islands","Uruguay","Uzbekistan",
    "Vanuatu","Vatican City","Venezuela","Vietnam","Wallis and Futuna","Western Sahara",
    "Yemen","Yugoslavia","Zambia","Zimbabwe"
  };

Esta é a matriz de cadeias de caracteres que serão colocadas no ListView.

Execute o aplicativo. Você pode rolar a lista ou digitá-la para filtrá-la e clicar em um item para ver uma mensagem. Você deverá ver algo como:

Captura de tela de exemplo de ListView com nomes de país/região

Observe que o uso de uma matriz de cadeia de caracteres codificada não é a prática de design recomendada. Um deles é usado neste tutorial para simplificar, para demonstrar o ListView Widget. A prática melhor é fazer referência a uma matriz de cadeia de caracteres definida por um recurso externo, como com um string-array recurso no arquivo Resources/Values/Strings.xml do projeto. Por exemplo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">HelloListView</string>
  <string-array name="countries_array">
    <item>Bahrain</item>
    <item>Bangladesh</item>
    <item>Barbados</item>
    <item>Belarus</item>
    <item>Belgium</item>
    <item>Belize</item>
    <item>Benin</item>
  </string-array>
</resources>

Para usar essas cadeias de caracteres de recurso para o ArrayAdapter, substitua o original ListAdapter linha com o seguinte:

string[] countries = Resources.GetStringArray (Resource.Array.countries_array);
ListAdapter = new ArrayAdapter<string> (this, Resource.Layout.list_item, countries);

Execute o aplicativo. Você deverá ver algo como:

Captura de tela de exemplo de ListView com lista menor de nomes

Indo mais longe com ListView

Os tópicos restantes (vinculados abaixo) dão uma olhada abrangente no trabalho com a ListView classe e os diferentes tipos de adaptador que você pode usar com ela. A estrutura é a seguinte:

  • Aparência Visual – Partes do ListView controle e como elas funcionam.

  • Classes – Visão geral das classes usadas para exibir um ListViewarquivo .

  • Exibindo dados em um ListView – Como exibir uma lista simples de dados, como implementar ListView's recursos de usabilidade, como usar diferentes layouts de linha internos e como os adaptadores economizam memória reutilizando exibições de linha.

  • Aparência personalizada – Alterando o ListView estilo do com layouts, fontes e cores personalizados.

  • Usando SQLite – Como exibir dados de um banco de dados SQLite com um CursorAdapterarquivo .

  • Ciclo de vida da atividade – Considerações de design ao implementar ListView atividades, incluindo onde no ciclo de vida você deve preencher seus dados e quando liberar recursos.

A discussão (dividida em seis partes) começa com uma visão geral da ListView própria classe antes de introduzir exemplos progressivamente mais complexos de como usá-la.

Resumo

Este conjunto de tópicos introduziu ListView e forneceu alguns exemplos de como usar os recursos internos do ListActivity. Ele discutiu implementações personalizadas que permitiam layouts coloridos e o uso de ListView um banco de dados SQLite, e abordou brevemente a relevância do ciclo de vida da atividade em sua ListView implementação.