彩票走势图

Xamarin.Android使用教程:列表视图和适配器(1)

原创|使用教程|编辑:黄竹雯|2016-03-17 17:28:17.000|阅读 1616 次

概述:在过去的几天里我们已经知道很多关于Android和Xamarin.Android使用技巧。现在让我们来深入了解在Android的列表视图中最常用的视图。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

<Xamarin Platform 试用版下载地址>

在过去的几天里我们已经知道很多关于Android和Xamarin.Android使用技巧。现在让我们来深入了解在Android的列表视图中最常用的视图。

几乎每一个应用程序中都有列表视图,但事实上,我让你快速而准确地说出你的手机上没有一些要求(不含游戏)列出数据列表的3款应用的名称,你会发现这并不容易,不是吗?!那么就让我们来仔细学习Android开发的这一部分。

列表视图顾名思义是用来保存排列的可浏览数据列表(或集合)。这些排列可以很简单,也可以如你想要的复杂,每一个排列可以包含任何我们在在本系列的早期博客中讨论的视图组。

每一个列表视图通过一个适配器都有它自己的数据。适配器是一个类,相当于列表视图和列表视图显示的数据之间的胶水。适配器也负责创建和填充列表视图显示的排列信息。我们有多种类型的适配器,比如:

  • ArrayAdapter
  • SimpleAdapter
  • BaseAdapter
  • CursorAdapter

让我们来通过代码看看在Xamarin.Android中一个简单的列表视图是什么样子。首先让我们看看AXML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/moviesListView" />
</LinearLayout>

AXML文件很简单,在我们的案例中只是将列表视图添加到父视图组。 让我们来看看活动代码:

using Android.App;
using Android.OS;
using Android.Widget;
 
namespace AdapterDemo1
{
    [Activity(Label = "AdapterDemo1", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
 
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
 
            var moviesListView = FindViewById<ListView>(Resource.Id.moviesListView);
 
            var moviesAdapter = new ArrayAdapter<Movie>(this, Android.Resource.Layout.SimpleListItem1, MoviesRepository.Movies);
            
            moviesListView.Adapter = moviesAdapter;
        }
    }
}

最重要的两个活动代码行

  • 我们创建一个电影数据的ArrayAdapter:一组适配器是Android中BaseAdapater的一种具体实现,它可以预测数组列表的数据。ArrayAdapter的显示通常是通过在适配器处理的对象上调用ToString()方法。
  • 找到列表视图和分配其电影适配器的适配器

让我们来看看这部电影类和电影库如何捕捉所有代码的类

using System;
 
namespace AdapterDemo1
{
    public class Movie
    {
        public string Title { get; set; }
        public string Episode { get; set; }
        public string Director { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}
using System;
using System.Collections.Generic;
 
namespace AdapterDemo1
{
    public static class MoviesRepository
    {
        public static List<Movie> Movies { get; private set; }
 
        static MoviesRepository()
        {
            Movies = new List<Movie>();
            AddMovies();
        }
 
        private static void AddMovies()
        {
            Movies.Add(new Movie
            {
                Title = "A New Hope",
                Director = "George Lucas",
                Episode = "IV",
                ReleaseDate = new DateTime(1977, 05, 25)
            });
 
            Movies.Add(new Movie
            {
                Title = "The Empire Strikes Back",
                Director = "George Lucas",
                Episode = "V",
                ReleaseDate = new DateTime(1980, 05, 17)
            });
 
            Movies.Add(new Movie
            {
                Title = "Return of the Jedi",
                Director = "George Lucas",
                Episode = "VI",
                ReleaseDate = new DateTime(1983, 05, 25)
            });
 
            Movies.Add(new Movie
            {
                Title = "The Phantom Menace",
                Director = "George Lucas",
                Episode = "I",
                ReleaseDate = new DateTime(1999, 05, 19)
            });
 
            Movies.Add(new Movie
            {
                Title = "Revenge of the Sith",
                Director = "George Lucas",
                Episode = "III",
                ReleaseDate = new DateTime(2005, 05, 19)
            });
 
            Movies.Add(new Movie
            {
                Title = "The Force Awakens",
                Director = "J.J. Abrams",
                Episode = "VII",
                ReleaseDate = new DateTime(2015, 12, 11)
            });
        }
    }
}

这是很直观.NET,我们有一个POCO对象和一个库模式的Demo-Need实现。

让我们运行这个应用程序,看看它的样子:

嗯,我没有看到任何电影信息而只是看到了电影类的名称空间。这是为什么呢?原因很简单,正如我上面提到的,ArrayAdapter的显示是通过在其处理的对象上简单地调用.ToString()。让我们尝试为电影对象和更好的显示来进行覆盖。

using System;
 
namespace AdapterDemo1
{
    public class Movie
    {
        public string Title { get; set; }
        public string Episode { get; set; }
        public string Director { get; set; }
        public DateTime ReleaseDate { get; set; }
 
        public override string ToString()
        {
            return "Episode " + Episode + " " + Title + " by " + Director;
        }
    }
}

现在这样我更喜欢。是的,我们这些急切的《星球大战》的粉丝门,我也在列表中收藏了第七集。

检测项目点击

现在让我们看看当一个条目被点击时,我们如何检测。

只要点击一个条目,列表视图就会暴露一个事件处理程序,来注册到订阅ItemClick事件处理程序的事件

moviesListView.ItemClick += moviesListView_ItemClick;
void moviesListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {   
            Toast.MakeText(this, MoviesRepository.Movies[e.Position].ToString(), ToastLength.Long).Show();
 
        }

关键在于ItemClickEventArgs类的一个“位置”属性,它是用来识别哪一行被点击的。不要担心Toasts代码,我们将在下一篇博客中详细讲到。

所以如果我们运行这个应用程序,我们应该看到类似于以下的画面:

就这样,项目点击的一个简单的toast显示细节。现在,当一个项目被点击时我们能做什么的可能性是无止境的,我只是碰巧选择了最简单的方式来展示我们能做些什么。

今天就到这里,明天让我们挖掘更多关于如何控制ListView适配器和布局的知识。

 

Xamarin正式被Microsoft收购,慧都将为您提供更好的解决方案和服务!详情请<>


标签:移动开发Xamarin

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP