Xamarin Android -   Tratando eventos de forma declarativa


 Neste artigo vou mostrar como podemos realizar o tratamento de eventos em uma aplicação Xamarin Android de forma declarativa usando o VS 2015 Community e a linguagem C#.

Em aplicações Android os componentes da interface do usuário (UI) são totalmente isolados da sua Activity associada.

Para realizar a vinculação ou para ligar os componentes com a sua atividade precisamos realizar uma abordagem parecida com a adotada pelo JavaScript que é : primeiro localizar o elemento e então interagir com ele.

Vamos supor que temos uma view representada por um arquivo .axml contendo um button com o id MyButton (esse cenário ocorre sempre que você cria uma aplicação Android vazia no Visual Studio)

Neste caso teremos o seguinte código Main.axml:

Na respectiva Activity associada para poder usar o evento Click do botão de comando temos o seguinte código:

using Android.App;
using Android.OS;
using Android.Widget;
namespace App.PrimeiraApp
{
    [Activity(Label = "App.PrimeiraApp", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.MyButton);
            button.Click += delegate
            {
                button.Text = string.Format("{0} clique!", count++);
            };
       }
    }
}

Observe que tivemos que instanciar um objeto do tipo Button usando FindViewById e depois definimos o evento Click para a instância criada.

Mas será que essa é a única abordagem que temos para pode realizar o tratamento de eventos ???

Não. !!

Podemos realizar o tratamento de eventos de forma declarativa no arquivo .axml.

Realizando o tratamento de eventos de forma declarativa

Para realizar o tratamento de eventos de forma declarativa no arquivo .axml basta seguir o seguinte roteiro:

1- Inclua uma referência à biblioteca Mono.Android.Export no seu projeto;

     No menu Project clique em Add Reference e selecione Framework e marque a opção Mono.Android.Export;

2- Declara o evento que deseja tratar no arquivo .axml.  Veja o exemplo a seguir :

...
<Button
        android:id="@+id/MyButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/Hello"
        android:onClick="btn_Evento"/>
...

3 - Na respectiva Activity defina o seguinte código :

using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using Java.Interop;
namespace App.EventosDeclarativos
{
    [Activity(Label = "App.EventosDeclarativos", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;
        [Export("btn_Evento")]
        public void button_Click(View v)
        {
            Toast.MakeText(this, "Evento Click", ToastLength.Short).Show();
            (v as Button).Text = string.Format("{0} cliques !", count++);
        }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
        }
    }
}

No código usamos o atributo [Export("nome_evento_no_XML")] e definimos o código no evento Click.

Note que declaramos no namespace Java.Interop.

Executando o código acima teremos o mesmo comportamento para o evento Click e veremos também o aviso - "Evento Click" - sendo exibido no dispositivo:

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

Porque Deus enviou o seu Filho ao mundo, não para que condenasse o mundo, mas para que o mundo fosse salvo por ele.
Quem crê nele não é condenado; mas quem não crê já está condenado, porquanto não crê no nome do unigênito Filho de Deus.

João 3:17,18

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:


José Carlos Macoratti