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); }