参考文章:http://blog.csdn.net/zhouyuanjing/article/details/8372686

GridView初始化代码:

gridViewStudent = FindViewById<GridView> (Resource.Id.gridViewStudent);
//GridViewAdapter 自定义的Adapter
GridViewAdapter gridAdapter = new GridViewAdapter (this,stu);
//更新图片 使用默认SimpleAdapter,需重写ViewBinder
//adapter.ViewBinder = new ViewBinder ();
gridViewStudent.Adapter = gridAdapter;
//gridView.ChoiceMode = ChoiceMode.MultipleModal;//长按多选多选模式
gridViewStudent.ChoiceMode = ChoiceMode.Multiple;//设置多选模式
//GridMultiChoiceListener自定义监听
gridViewStudent.SetMultiChoiceModeListener (new GridMultiChoiceListener(this));// 设置多选模式监听器
GridViewAdapter 实现:
public class GridViewAdapter:BaseAdapter
{
Context context;
List<Student> data;
//List<int> selected = new List<int>();
public GridViewAdapter(Context c,List<Student> data){
context = c;
this.data = data;
} /*public void SelectedItem(int selected)
{
this.selected.Add (selected);
}*/ public override int Count {
get {
return data.Count;
}
} public override Java.Lang.Object GetItem (int position)
{
return position;
} public override long GetItemId (int position)
{
return position;
} //主要方法
public override View GetView (int position, View convertView, ViewGroup parent)
{
GridItem item; if (convertView == null) {
item = new GridItem (context); item.LayoutParameters = new GridView.LayoutParams (GridView.LayoutParams.WrapContent,
GridView.LayoutParams.WrapContent); } else {
item = convertView as GridItem;
} item.ID.Text = data[position].ID;
item.Name.Text = data [position].Name;
return item; }
}

GetView 为主要操作方法,用来数据显示等。GridItem为自定义类,标识gridview的一个子视图

GridItem 实现;

public class GridItem:RelativeLayout,ICheckable
{
bool _checked; public ImageView HeadImg {
get;
set;
} public ImageView SelectedImg {
get;
set;
} public TextView Name {
get;
set;
}
public TextView ID {
get;
set;
} public GridItem (Context context) : base (context)
{ //从布局文件加载元素
       LayoutInflater.From(context).Inflate(Resource.Layout.gridItem,this);
HeadImg = FindViewById<ImageView>(Resource.Id.imageHead);
SelectedImg = FindViewById<ImageView>(Resource.Id.imageSelect);
Name = FindViewById<TextView> (Resource.Id.textStuName);
ID = FindViewById<TextView> (Resource.Id.textStuID);
}
//进行状态切换
public bool Checked {
get {return _checked; }
set {
_checked = value;
SelectedImg.Visibility=value?ViewStates.Visible:ViewStates.Gone;
SetBackgroundDrawable (value ? Resources.GetDrawable (Resource.Drawable.gridBackground) : null);
}
} public void Toggle ()
{
Checked = !_checked;
}
}
GridMultiChoiceListener类实现
//这里继承一下Java.Lang.Object对象,不然要实现C#IDisposable接口
class GridMultiChoiceListener:Java.Lang.Object, GridView.IMultiChoiceModeListener
{
private Context context; public GridMultiChoiceListener(Context context)
{
this.context = context;
} public void OnItemCheckedStateChanged (ActionMode mode, int position, long id, bool isChecked)
{
//mode.Invalidate ();
} public bool OnActionItemClicked (ActionMode mode, IMenuItem item)
{
return true;
} public bool OnCreateActionMode (ActionMode mode, IMenu menu)
{
return true;
} public void OnDestroyActionMode (ActionMode mode)
{ } public bool OnPrepareActionMode (ActionMode mode, IMenu menu)
{
return true;
} }

Xamarin 实现android gridview 多选的更多相关文章

  1. Xamarin开发Android应用打包apk

    Visual Studio中用Xamarin开发Android应用,生成apk文件有3种方法 1.debug时,代码目录下bin\Debug中会自动生成调试用***-Signed.apk文件,但是文件 ...

  2. 【Xamarin开发 Android 系列 1】环境部署搭建

    原文:[Xamarin开发 Android 系列 1]环境部署搭建 开篇自然先扯一段,近几年移动互联网如果熊猫零食一样,蔓延迅速.楼主身为一个微软忠实的粉丝,无奈,老爹不给力.Silverlight开 ...

  3. Xamarin Studio Android 配置

    原文:Xamarin Studio Android 配置 C#依托于mono平台可以实现Unix平台服务器端开发已经不是什么新鲜事了,而Xarmain公司(初始成员大多来自原Mono.MonoTouc ...

  4. Xamarin C# Android for Visual Studio 平台安装

    原文:Xamarin C# Android for Visual Studio 平台安装 Xamarin是基于Mono的平台,目前主要有以下产品(更具体请见:http://xamarin.com/pr ...

  5. C#-Xamarin的Android项目开发(二)——控件应用

    相信我,这不是一篇吐槽文章.... 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计.... 但在这种特别的关系里还是有一定的规律的,下面我们 ...

  6. xamarin开发android收集的一些工具

    xamarin开发android收集的一些工具 工欲善其事,必先利其器,从16年下半年开始做xamarin相关的开发,平时使用的一些工具和google插件给大家分享一下,都有下载地址,持续更新. Vi ...

  7. C#-Xamarin的Android项目开发(一)——创建项目

    创建项目 使用Xamarin开发安卓项目,首先需要安装VS2017以上版本.因为VS2017以上的版本,可以直接创建Xamarin项目. 另外用Xamarin开发安卓项目,还需要使用Intel的CPU ...

  8. C#-Xamarin的Android项目开发(三)——发布、部署、打包

    前言 部署,通常的情况下,它其实也是项目开发的一个难点. 为什么这么说呢?因为,它不是代码开发,所以很多开发者本能的拒绝学习它. 并且一个项目配置好一次以后,部署的步骤和部署的人通常很固定,所以大部分 ...

  9. Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结

    最近公司要开发android 所以研究了一下Xamarin  to android 中个GPS 废话不多说,说重点. 想获取手机上的gps信息必不可少的就是要使用 LocationManager Lo ...

随机推荐

  1. [AngularJS] Directive using another directive by 'require'

    Directive can use another directive though 'require' keyword. angular.module('docsTabsExample', []) ...

  2. Swift 3.0 使用Core Data

    swift版本:3.0 Xcode版本:8.0 iOS版本:10.0 自iOS10 和swift3.0 之后,苹果的访问CoreData的方法发生了很大改变,简洁了许多,下面的内容是从0开始建立一个e ...

  3. C#使用SOAP获取webservice实例解析

    本文主要參考例如以下两个链接.并整理: Java使用SOAP: http://www.cnblogs.com/linjiqin/archive/2012/05/07/2488880.html C# s ...

  4. rabbitmq——用户管理

    安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. 翻看官方的release文档后,得知由于账号gues ...

  5. iOS之隐藏状态栏

    iOS7中,不仅应用的风格有一定的变化,状态栏变化比较大,我们可以看到UIViewController的状态栏与导航栏基本是一体的.因此UIVIEWCONTROLLER的hide/show状态的方法也 ...

  6. Django单元测试二三事

    零.前言 之前做过一个微信公众平台的开发者后台,功能比较简单,我个人也比较懒,所以就没有写测试.前段时间更新了一下版本,对代码进行了改动.结果昨天收到消息说后台出问题了,一个功能无法使用.我检查了半天 ...

  7. LeetCode 260

    Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...

  8. 实现TableLayout布局下循环取出TableRow控件中的文字内容到list集合

    布局方式为TableLayout,利于实现表单样式展现. <!-- 详情内容区域 --> <ScrollView android:layout_above="@id/id_ ...

  9. 跟我一起学习VIM - The Life Changing Editor

    前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是对我多年来使用VIM的最大鼓舞吧.所以分 ...

  10. MVC Model Binder

    这篇博客是借助一个自己写的工程来理解model binder的过程. MVC通过路由系统,根据url找到对应的Action,然后再执行action,在执行action的时候,根据action的参数和数 ...