温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android 针对继承BaseAdapter的自定义适配器应注意的几个地方

发布时间:2020-07-11 12:50:10 来源:网络 阅读:1420 作者:我不会抽烟 栏目:移动开发

通常我们写一个继承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中去,理解不了,可以看下图:

Android 针对继承BaseAdapter的自定义适配器应注意的几个地方

这是一个activity的layout布局。

Android 针对继承BaseAdapter的自定义适配器应注意的几个地方

这是一个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了,那么后面的事情就不用多想了,不会调用。这个坑我记得是把我整的挺惨,希望大家别掉下去。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI