通常我们写一个继承BaseAdapter的自定义适配器的时候,主要想做的大概有两件事:
1、在适配的组件里(如ListView,GridView)定义自己想要的布局(Layout)。
2、为布局里的组件(如Button)添加触发响应的事件(如Click)。
当我们写自定义Adapter的时候需要override以下几个方法
@Overridepublic int getCount() { return 0; } @Overridepublic Object getItem(int position) { return null; } @Overridepublic long getItemId(int position) { return 0; } @Overridepublic View getView(int position, View convertView, ViewGroup parent) { return null; }
这里我们需要了解getView方法不是在页面生成的时候只被调用一次,而是根据你当前页面能显示的List里的条目数,被调用数次。什么意思呢?说白了,我们生成的这个自定义的页面(通常是放在ListView里的)看起来好像是一个整体,实际上是由许多个convertView拼装成的,每个convertView就相当于一个Item,然后这些Item被塞到ListView中去,理解不了,可以看下图:
这是一个activity的layout布局。
这是一个Item的layout布局。
convertView里我们就可以随意的加些小组件,比如按钮啊,然后为按钮添加一些事件什么的。
getView里的具体实现我就不缀述了,我想强调的是返回值,一定要return最新生成的convertView,否则功亏一篑。这里我栽过小2次。正确的就是这样:
@Overridepublic View getView(int position, View convertView, ViewGroup parent) { //这里就是给获取组件,进行一些赋值操作或者添加事件 return convertView; }
然后,这里还有另外一个坑,就是getCount方法。默认情况下就如同上面写的一样,看似好像可以不用管它,直接return 0;就好,不过经过我这个试坑专员的验证,不管它是绝对不行的。当我们用 listview去setAdapter的时候,程序先走的是你自定义Adapter的构造函数,然后就会走getCount方法,之后才会进入getView方法,如果getCount返回0了,那么后面的事情就不用多想了,不会调用。这个坑我记得是把我整的挺惨,希望大家别掉下去。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。