首页 > 代码库 > xamarin android——数据绑定到控件(一)

xamarin android——数据绑定到控件(一)

mono for android 中光标由ICursor 接口标识,该接口公开了操作结果数据集的所有方法。光标的使用非常消耗系统资源,所以不使用时应该光比光标。可以通过StartManagingCursor方法允许应用程序管理光标。示例中通过spinner显示用户浏览网址的历史记录,历史记录通过系统提供的内容提供器获取数据,更多内容提供器参考Android 开发文档http://developer.android.com/reference/android/provider/package-summary.html。

注意:添加相应的权限

在活动中定义InitSpinner方法,用来初始化spinner对象和关联适配器和适配器视图。private void InitSpinner()

        {
            spinner = FindViewById<Spinner> (Resource.Id.spinner);
            //定义变量 判断所选项,避免初始数据会出发ItemSelected
            int lastSpinnerSelectedPositon=0;

            //使用系统提供的适配器视图模板SimpleSpinnerItem
            SimpleCursorAdapter spinnerAdapter1 = new SimpleCursorAdapter (this,Android.Resource.Layout.SimpleSpinnerItem,GetBookMarkCursor(),
            new string[]{ Browser.BookmarkColumns.Title },new int[]{ Android.Resource.Id.Text1 });

            //获取联系人
            //SimpleCursorAdapter spinnerAdapter2 = new SimpleCursorAdapter (this,Android.Resource.Layout.SimpleSpinnerItem,GetContacts(),
            //    new string[]{ ContactsContract.ContactsColumns.DisplayName },new int[]{ Android.Resource.Id.Text1 });

            //指定spinner 弹出的选择列表的样式
            spinnerAdapter1.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);
            spinner.Adapter = spinnerAdapter1;
            //spinner.Prompt = "选择打开网址";
            spinner.ItemSelected+= (object sender, AdapterView.ItemSelectedEventArgs e) => {
                var curSelectedIndex = spinner.SelectedItemPosition;
                //避免初始化数据时执行方法
                if (curSelectedIndex!=lastSpinnerSelectedPositon) {
                    Android.Database.ICursor selectedItem = (Android.Database.ICursor)spinner.SelectedItem;
                    var webUrl = selectedItem.GetString(selectedItem.GetColumnIndex(Browser.BookmarkColumns.Url));
            
            //通过意图打开指定网址 Intent browerIntent
= new Intent(Intent.ActionView); browerIntent.SetData(Android.Net.Uri.Parse(webUrl)); StartActivity(browerIntent); /*Intent callIntent = new Intent(Intent.ActionCall,Android.Net.Uri.Parse("tel:10086")); StartActivity(callIntent);*/ lastSpinnerSelectedPositon = curSelectedIndex; } }; }

创建SimpleCursorAdapter对象,通过GetBookMarkCursor方法提供数据,方法的主要功能是通过Activity类的ManagedQuery方法查询内容提供器,可以避免直接管理光标。

参数及返回值介绍

参数:

uri, 用于 Content Provider 查询的 URI,也就是说从这个 URI 中获取数据。例如:

Uri uri = Contacts.People.CONTENT_URI; //联系人列表URI。

projection, 用于标识 uri 中有哪些 columns 需要包含在返回的 Cursor 对象中。例如:

//待查询的columns

String[] projection = { Contacts.PeopleColumns.NAME, Contacts.PeopleColumns.NOTES };

selection, 作为查询的过滤参数(过滤出符合 selection 的数据),类似于 SQL 中 Where 语句之后的条件选择。例如:

String selection = Contacts.People.NAME + “=?” //查询条件

selectionArgs查询条件参数,配合 selection 参数使用。例如:

String[] selectionArgs = {“Braincol”, “Nixn.dev”};//查询条件参数

sortOrder,查询结果的排序方式(按查询列( projection 参数中的 columns )中的某个 column )排序)。例如:

String sortOrder = Contacts.PeopleColumns.NAME; //查询结果的排序方式(按指定的查询列排序)

返回值:

 一个包含指定数据的 Cursor 对象。

 

GetBookMarkCursor方法实现

private Android.Database.ICursor GetBookMarkCursor()
        {
            //通过系统提供的内容提供器获取数据
            return ManagedQuery (Browser.BookmarksUri,new string[]{ Browser.BookmarkColumns.Title,
                Browser.BookmarkColumns.Url,Browser.BookmarkColumns.InterfaceConsts.Id},null,null,null);
        }