zoukankan      html  css  js  c++  java
  • Android in Mono开发初体验之ListAdapter

      本文给大家介绍在MonoDevelop环境下实现Android中的ListAdapter显示数据功能。

     

      前一段时间在网上看到可以使用C#开发Android的新闻,感觉非常不错。毕竟我也写过.NET程序,所以就特别好奇,特别想想看看如何使用C#来开发Android程序。然后就来到了Mono的官方网站下载安装程序并配置开发环境,至于如何配置其开发环境这里不再说述,有兴趣或需要的朋友直接登录Mono的官方网站查看:http://xamarin.com/

      目前MonoDevelop有收费和免费的版本,免费的只能在模拟器上运行,不能安装到真机中测试,不过这不影响我们研究MonoDevelop来开发Android程序。这个大家了解下就可以了。

      今天这个示例是使用ListAdapter来显示数据,我让ListAdapter直接继承自BaseAdapter。关于Adapter的详细信息在这里我不再详述,有兴趣的朋友直接上网搜索一下相关资料。接下来让我们先看一下今天这个示例的运行效果,如下图所示:

        

      下面呢,让我们在MonoDevelop中新建程序,选择Mono for Android Application模板,下面是程序结构图:

       

      我们需要在程序中新建一个类,命名为Application.cs,其代码如下:

    using System;
    
    namespace MyListAdapter
    {
        /// <summary>
        /// Application.
        /// 应用程序实体类
        /// </summary>
        public class Application
        {
            public Application ()
            {
            }
    
            public string Name {
                get;
                set;
            }
    
            public string Description {
                get;
                set;
            }
    
            public int Image {
                get;
                set;
            }
        }
    }

      接下来,我们需要在ListView中展示信息,那么就需要为ListView设置每行的Item样式。在MonoDevelop下设计布局界面和在Eclipse中差不多,代码也几乎一样。如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="80px">
        <ImageView
            android:id="@+id/imageView_item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical" />
        <LinearLayout
            android:id="@+id/linearlayout_text"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:layout_marginLeft="10px"
            android:layout_marginTop="10px">
            <TextView
                android:id="@+id/textview_top"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TextView" />
            <TextView
                android:id="@+id/textview_bottom"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TextView" />
        </LinearLayout>
    </LinearLayout>

      不过,需要注意的是在引用布局中的View时,是使用类似于Resource.Id.imageView_item这样的方式。在ListAdapter类中,我让ListAdapter继承BaseAdapter,由于BaseAdapter是一个抽象类,这就要求我们实现其相应的属性和方法。看下面代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    
    namespace MyListAdapter
    {
        /// <summary>
        /// List adapter.
        /// ListView数据适配器
        /// </summary>
        public class ListAdapter : BaseAdapter<Application>
        {
            private Activity context = null;
            public List<Application> list = null;
    
            /// <summary>
            /// 默认构造器
            /// </summary>
            public ListAdapter ()
            {
            }
    
            /// <summary>
            /// 带参构造器
            /// </summary>
            /// <param name="context"></param>
            /// <param name="list"></param>
            public ListAdapter (Activity context, List<Application> list): base()
            {
                this.context = context;
                this.list = list;
            }
    
            public override int Count {
                get { return this.list.Count; }
            }
    
            public override Application this [int position] {
                get { return this.list[position]; }
            }
    
            public override View GetView (int position, View convertView, ViewGroup parent)
            {
                var item = this.list[position];
                var view = convertView;
    
                if (convertView == null || !(convertView is LinearLayout))
                {
                    view = context.LayoutInflater.Inflate(Resource.Layout.Main, parent, false);
                }
    
                var imageItem = view.FindViewById (Resource.Id.imageView_item) as ImageView;
                var tvName = view.FindViewById (Resource.Id.textview_top) as TextView;
                var tvDescrtion = view.FindViewById (Resource.Id.textview_bottom) as TextView;
    
                imageItem.SetImageResource (item.Image);
                tvName.SetText (item.Name, TextView.BufferType.Normal);
                tvDescrtion.SetText (item.Description, TextView.BufferType.Normal);
    
                view.Click += delegate(object sender, EventArgs e)
                {
                    Toast.MakeText(context,((TextView)tvName).Text,ToastLength.Long).Show();
                };
    
                return view;
            }
    
            public override long GetItemId (int position)
            {
                return position;
            }
        }
    }

      一般呢,我们会将ListAdapter作为ListView的数据桥梁,用ListView来展现数据。当然了,我们也可以不用ListView来达到展现数据的目的。打开MainActivity文件,将类继承的Activity修改成ListActivity,编写相应的代码:

    using System;
    
    using Android.App;
    using Android.Content;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    using Android.OS;
    using System.Collections.Generic;
    
    namespace MyListAdapter
    {
        [Activity (Label = "MyListAdapter", MainLauncher = true)]
        public class MainActivity : ListActivity
        {
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
    
                // 初始化列表数据
                InitListData();
            }
    
            /// <summary>
            /// 初始化列表数据
            /// </summary>
            public void InitListData()
            {
                this.ListAdapter = new ListAdapter(this,
                new List<Application>() {
                    new Application() { Name = "angrybirds",Description = "angrybirds",Image = Resource.Drawable.angrybirds },
                    new Application() { Name = "camera",Description = "camera",Image = Resource.Drawable.camera },
                    new Application() { Name = "evernotealt",Description = "evernotealt",Image = Resource.Drawable.evernotealt },
                    new Application() { Name = "fruitninja Mouse",Description = "fruitninja",Image = Resource.Drawable.fruitninja },
                    new Application() { Name = "gtalk",Description = "gtalk",Image = Resource.Drawable.gtalk },
                    new Application() { Name = "handcent",Description = "handcent",Image = Resource.Drawable.handcent },
                    new Application() { Name = "maps",Description = "maps",Image = Resource.Drawable.maps },
                    new Application() { Name = "tasks",Description = "tasks",Image = Resource.Drawable.tasks },
                    new Application() { Name = "twitterblue",Description = "twitterblue",Image = Resource.Drawable.twitterblue },
                    new Application() { Name = "widgetlocker",Description = "widgetlocker",Image = Resource.Drawable.widgetlocker },
                    new Application() { Name = "youtube",Description = "youtube",Image = Resource.Drawable.youtube }, 
                    new Application() { Name = "settingsa",Description = "settingsa",Image = Resource.Drawable.settingsa },
                    new Application() { Name = "cam360",Description = "cam360",Image = Resource.Drawable.cam360 },
                    new Application() { Name = "downloads",Description = "downloads",Image = Resource.Drawable.downloads },
                    new Application() { Name = "dropbox",Description = "dropbox",Image = Resource.Drawable.dropbox },
                    new Application() { Name = "evernote",Description = "evernote",Image = Resource.Drawable.evernote },
                    new Application() { Name = "recorder",Description = "recorder",Image = Resource.Drawable.recorder }
                }
                );
            }
        }
    }

      这样,相应的代码都已经编写完毕,在MonoDevelop中只需要按F5键运行就可以了,如果模拟器没启动,需要我们先动一个模拟器。另外,我们需要注意的是,如果大家是在VS2010中运行程序,需要点击"生成-->配置管理器",选择"布署",再点击运行就可以了。如下图:

       

      其实呢,使用MonoDevelop开发Android程序,只要我们有Android的开发经验,很快就能上手。即使是新手,有点C#基础上手起来也不是难事。以上就是在Mono中开发Android的ListAdapter并生成相应列表的过程。

      注意在运行示例时,一定要将Mono环境配置好。关于环境的配置不再详述。

      示例下载:/Files/hanyonglu/AndroidFile/MyListAdapter.rar

     
      Github地址:https://github.com/hanyonglu/MonoListAdapter

      最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/08/14/2638428.html 谢谢。

      完毕。^_^

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/hanyonglu/p/2638428.html
Copyright © 2011-2022 走看看