原創|使用教程|編輯:黃竹雯|2016-03-17 17:28:17.000|閱讀 1698 次
概述:在過去的幾天里我們已經知道很多關于Android和Xamarin.Android使用技巧。現在讓我們來深入了解在Android的列表視圖中最常用的視圖。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在過去的幾天里我們已經知道很多關于Android和Xamarin.Android使用技巧。現在讓我們來深入了解在Android的列表視圖中最常用的視圖。
幾乎每一個應用程序中都有列表視圖,但事實上,我讓你快速而準確地說出你的手機上沒有一些要求(不含游戲)列出數據列表的3款應用的名稱,你會發現這并不容易,不是嗎?!那么就讓我們來仔細學習Android開發的這一部分。
列表視圖顧名思義是用來保存排列的可瀏覽數據列表(或集合)。這些排列可以很簡單,也可以如你想要的復雜,每一個排列可以包含任何我們在在本系列的早期博客中討論的視圖組。
每一個列表視圖通過一個適配器都有它自己的數據。適配器是一個類,相當于列表視圖和列表視圖顯示的數據之間的膠水。適配器也負責創建和填充列表視圖顯示的排列信息。我們有多種類型的適配器,比如:
讓我們來通過代碼看看在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; } } }
最重要的兩個活動代碼行
讓我們來看看這部電影類和電影庫如何捕捉所有代碼的類
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收購,慧都將為您提供更好的解決方案和服務!詳情請<>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網