Neste artigo vou apresentar o novo recurso CollectionView da versão 4.0 do Xamarin Forms. |
O Xamarin.Forms vem evoluindo e melhorando a cada nova versão e com a versão 4.0 temos muitas novidades. Hoje vou apresentar o recurso CollectionView.
A CollectionView é uma view para apresentar listas de dados usando diferentes especificações de layout. O objetivo é fornecer uma alternativa mais flexível e eficiente ao ListView.
Este recurso esta disponível a partir da versão 4.0, e, quando escrevi este artigo, estava em modo experimental. Para poder usar a CollectionView teremos que adicionar o código abaixo ás classes AppDelegate no iOS, e, MainActivity no Android, antes da chamada de Forms.Init:
global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental"); |
Embora sejam similares, cabe destacar as seguintes diferenças entre a ListView e a CollectionView:
A CollectionView possui um modelo de layout flexível, que permite que os dados sejam apresentados na vertical ou na horizontal, em uma lista ou grade;
A CollectionView suporta seleção única e múltipla;
A CollectionView não tem conceito de células. Em vez disso, um modelo de dados é usado para definir a aparência de cada item de dados na lista.
A CollectionView usa automaticamente a virtualização fornecida pelos controles nativos subjacentes.
A CollectionView reduz a superfície da API do ListView. Muitas propriedades e eventos do ListView não estão presentes no CollectionView.
A CollectionView não inclui separadores internos.
Uma mudança que cabe destacar é que a CollectionView não possui o ViewCell oque melhora muito o desempenho.
Se você desejar migrar a ListView para a CollectionView pode consultar o roteiro na documentação oficial neste link: https://docs.microsoft.com/pt-br/xamarin/xamarin-forms/user-interface/collectionview/introduction
Vejamos agora um exemplo prático mostrando como usar a CollectionView.
Recursos usados:
Criando o projeto no Visual Studio 2019 Community
Abra o VS 2019 Community e clique em Create a New Project;
A seguir selecione :
Selecione o template: Mobile App (Xamarin.Forms) e clique em Next;
A seguir informe o local e o nome do projeto : XF_CollectionView
A seguir selecione o template Blank e as plataformas que deseja usar. Eu vou usar somente o Android:
Clique no botão OK.
Pronto, nosso projeto já esta criado.
A primeira coisa a fazer e alterar o código do arquivo MainActivity do projeto Android incluindo a linha destacada em azul conforme abaixo:
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
|
Se estiver usando também a plataforma iOS faça a mesma coisa na classe AppDelegate.
A seguir, ainda no projeto Android, vamos incluir 5 imagens, listadas a seguir, na pasta /Resources/drawable que iremos usar no projeto.
As imagens podem ser obtidas no site: https://material.io/resources/icons/?style=baseline
Implementando um layout básico com CollectionView e Shell
Vamos incluir no projeto, via opção Add New Item, um novo Content Page com o nome de CollectionViewPage.
Vamos usar o arquivo CollectionViewPage.xaml criado para definir um layout básico usando o CollectionView:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="XF_CollectionView.CollectionViewPage">
<ContentPage.Content>
<StackLayout>
<CollectionView x:Name="ColView1" ItemsSource="{Binding Amigos}"
Margin="10,0,0,0">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout HeightRequest="50" WidthRequest="200"
Orientation="Horizontal" Padding="0,5,0,5">
<Image Source="person"/>
<Label Text="{Binding}" VerticalOptions="Center"/>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
|
Observe que a CollectionView é muito parecida com a ListView possuindo o DataTemplate e a propriedade ItemsSource.
Agora abra o arquivo CollectionViewPage.xaml.cs e inclua o código que define uma lista de strings com nomes que iremos usar para exibir na CollectionView:
using System.Collections.Generic;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace XF_CollectionView
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CollectionViewPage : ContentPage
{
public List<string> Amigos { get; set; }
public CollectionViewPage()
{
InitializeComponent();
Amigos = new List<string>
{
"Pedro","Beatriz","Carlos","David","Eduardo","Francisco","Gil","Helena","Ivan",
"Joel","Cristina","Laurinda","Maria","Nanci","Olivia","Paulo","Amanda",
"Roberto","Sofia","Timoteo","Ursula","Vincente","William","Xavier","Ivonne"
};
ColView1.BindingContext = this;
// Vertical é o padrão
ColView1.ItemsLayout = new ListItemsLayout(ItemsLayoutOrientation.Vertical);
}
}
}
|
Observe que agora podemos definir a orientação na CollectionView, usando a propriedade ItemsLayoutOrientation , sendo que a padrão é a Vertical. Podemos também fazer a rolagem lateral.
Criando uma página para navegação usando o Shell
Agora eu vou criar uma página para definir opções e navegação usando o novo recurso Shell.
Nota: Para saber mais sobre este recurso veja o meu artigo: Xamarin.Forms : Apresentando o Shell
Antes vamos incluir mais duas views do tipo ContentPage:
Iremos usar essas views para exibir outras opções de leiaute mais adiante. Por isso vou definir, por enquanto, apenas uma Label com o nome da view conforme código a seguir:
<StackLayout>
<Label Text="GridPage" TextColor="Blue" FontSize="Large"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
|
Continuando, vamos aproveitar o arquivo MainPage.xaml já criado no projeto e incluir o código abaixo neste arquivo. Note que alteramos o tipo de Content para Shell:
<?xml version="1.0" encoding="utf-8" ?> <Shell xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:XF_CollectionView="clr-namespace:XF_CollectionView" mc:Ignorable="d" x:Class="XF_CollectionView.MainPage"> <ShellItem> <ShellSection Title="Basic" Icon="list"> <ShellContent> <XF_CollectionView:CollectionViewPage/> </ShellContent> </ShellSection> <ShellSection Title="Grid" Icon="grid"> <ShellContent> <XF_CollectionView:GridPage/> </ShellContent> </ShellSection> <ShellSection Title="Carousel" Route="carousel" Icon="carousel"> <ShellContent> <XF_CollectionView:CarouselPage/> </ShellContent> </ShellSection> </ShellItem> </Shell> |
Para concluir abra o arquivo MainPage.xaml.cs e altere o código para que a página herde de Shell:
using System.ComponentModel;
using Xamarin.Forms;
namespace XF_CollectionView
{
[DesignTimeVisible(false)]
public partial class MainPage : Shell
{
public MainPage()
{
InitializeComponent();
}
}
}
|
Executando o projeto iremos obter o seguinte resultado:
Na próxima parte do artigo vamos definir os demais leiautes nas views GridPage e CarouselPage.
Pegue o código do projeto compartilhado aqui : XF_CollectionView.zip (sem as referências)
Romanos 8:32
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.Widget.ListView/
https://developer.xamarin.com/api/property/Android.Widget.ListView.Adapter/
https://developer.xamarin.com/guides/xamarin-forms/user-interface/animation/