Android适配器之BaseAdapter

BaseAdapter是android应用程序中经常用到的基础数据适配器的基类,它实现了Adapter接口。

主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件进行显示。


在我们需要自定义适配器时(adapter)时我们就需要继承BaseAdapter抽象类,有几个函数是必须要重写的,它们是:

    public abstract int getCount()

    public abstract Object getItem(int position)   

    public abstract long getItemId(int position)

    public abstract View getView(int position, View convertView, ViewGroup parent)


其中getView()是重点需要重写的方法。


     1.getCount()决定了我们将要绘制的资源数,当然这个数目不能大于资源的总数,不过却可以小于资源的总数。例如我们adapter管理的资源总共有10个,而我们通过getCount()返回的只有6个,那么最终GridView绘制出来的将只有6个。


     2.getView():通过传入的参数position,加工成我们想要的View并返回,最终供控件使用


     3.getItemId()该方法的返回值决定第position处的列表项的ID,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。


     4.getItem():getItem方法不是在Baseadapter类中被调用的,而是在Adapterview.getItemAtPosition(position) 中被调用的。getItemAtPosition(position) 是在setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的点击选择处理事件中方便地调用来获取当前行数据的。
 

getItem()和getItemId()有什么用呢?我们知道,GridView将View以方格的方式展示出来之后是要与用户交互的(比如点击某张图片),为了更好的相应用户的动作,我们就要用到这两个函数了。



下面是本人自己写的一个自定义适配器:


 //自定义适配器
    class MyAdapter extends BaseAdapter {
        //得到所有元素数量
        @Override
        public int getCount() {
            return li.size();
        }
        //根据下标得到单个元素
        @Override
        public Object getItem(int position) {
            return li.get(position);
        }
        //得到单个元素的ID
        @Override
        public long getItemId(int position) {
            return position;
        }


//        (重点)对控件进行不同布局的配置以及其中元素的配置
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //设置不同的布局(大分类与小分类的布局不同)
            if (group.contains(li.get(position))){
                convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.lvg_group_view , null);
            }else{
                convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.lvg_child_view , null);
            }
            //设置文字
            TextView text = (TextView) convertView.findViewById(R.id.parent_title);
            text.setText(li.get(position));
            return convertView;
        }
    }



其中,lvg_group_view和lvg_child_view是本人自行写的两个layout文件,为大分类和小分类配置不同的布局和样式

两个文件中都有同一个TextView,id是一样的(当然也可以不一样,代码就需要放到上面的判断中去执行)


分享使人进步!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值