Android/适配器及适配器控件

  • simple adapter
  • base adapter
  • pager adapter
  • array adapter
    适配器:在安卓中,顾名思义就是把数据变成符合界面风格的形式,并且通过ListView显示出来。也就是说适配器是数据和界面之间的桥梁。适配器在数据库中的数据(后台)和显示页面(前端)中充当一个转换器的角色,数据库中的数据(如数组,链表,数据库,集合等)通过适配器变成类手机页面能够正常显示的数据。
    1.simple adapter
    第一个参数填上下文对象
    第二个为数据源(而且数据源必须是map对象组成的集合
    第三个参数是每个item的布局文件
    第四个参数为刚刚添加的数据源里面添加的关键字组(map里面的键)成的数组
    第五个参数为第三个布局文件里面与数据源相对应的显示控件的id(注意 填写的id 一定要与添加数据源是的顺序,与第四个参数的数组里面的键相对应)
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < names.length; i++) {
            Map<String, Object> showitem = new HashMap<String, Object>();
            showitem.put("touxiang", imgIds[i]);
            showitem.put("name", names[i]);
            showitem.put("says", says[i]);
            listitem.add(showitem);
        }
        //创建一个simpleAdapter  
        SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(),listitem,
                R.layout.list_item,new String[]{"touxiang","name","says"},
                new int[]{R.id.imgtou,R.id.name,R.id.says});
        ListView listView = (ListView)findViewById(R.id.list_test);
        listView.setAdapter(myAdapter);
    }
}  

2.BaseAdapter
使用BaseAdapter比较简单,主要是通过继承此类来实现BaseAdapter的四个方法:
1.public int getCount(): 适配器中数据集的数据个数;
2.public Object getItem(int position): 获取数据集中与索引对应的数据项;
3.public long getItemId(int position): 获取指定行对应的ID;
4.public View getView(int position,View convertView,ViewGroup parent): 获取没一行Item的显示内容。

public class MyAdapter extends BaseAdapter{
    private List<ItemBean> mList;//数据源
    private LayoutInflater mInflater;//布局装载器对象

    // 通过构造方法将数据源与数据适配器关联起来
    // context:要使用当前的Adapter的界面对象
    public MyAdapter(Context context, List<ItemBean> list) {
        mList = list;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    //ListView需要显示的数据数量
    public int getCount() {
        return mList.size();
    }

    @Override
    //指定的索引对应的数据项
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    //指定的索引对应的数据项ID
    public long getItemId(int position) {
        return position;
    }

    @Override
    //返回每一项的显示内容
    public View getView(int position, View convertView, ViewGroup parent) {
        //将布局文件转化为View对象
        View view = mInflater.inflate(R.layout.item,null);

        /**
         * 找到item布局文件中对应的控件 
         */
        ImageView imageView = (ImageView) view.findViewById(R.id.iv_image);
        TextView titleTextView = (TextView) view.findViewById(R.id.tv_title);
        TextView contentTextView = (TextView) view.findViewById(R.id.tv_content);

        //获取相应索引的ItemBean对象
        ItemBean bean = mList.get(position);

        /**
         * 设置控件的对应属性值 
         */
        imageView.setImageResource(bean.itemImageResId);
        titleTextView.setText(bean.itemTitle);
        contentTextView.setText(bean.itemContent);

        return view;
    }
}

用ViewHolder优化BaseAdapter的整体步骤:
1 创建bean对象,用于封装数据;
2 在构造方法中初始化的数据List;
3 创建ViewHolder类,创建布局映射关系;
4 判断convertView,为空则创建,并设置tag,不为空则通过tag取出ViewHolder;
5 给ViewHolder的控件设置数据。

3.PagerAdapter
PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter, FragmentStatePagerAdapter,这两个adapter都是Fragment的适配器,用于实现Fragment的滑动效果
PagerAdapter主要是viewpager的适配器,而viewPager则也是在android.support.v4扩展包中新添加的一个强大的控件,可以实现控件的滑动效果,比如在软件中常见的广告栏的滑动效果,用viewPager就可以实现。

private class ViewPagerAdapter extends PagerAdapter {  

        // 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量  
        @Override  
        public int getCount() {  
            return images.size();  
        }  

        // 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可  
        @Override  
        public boolean isViewFromObject(View arg0, Object arg1) {  
            return arg0 == arg1;  
        }  

        // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁  
        @Override  
        public void destroyItem(ViewGroup view, int position, Object object) {  
            view.removeView(images.get(position));  
        }  

        // 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可  
        @Override  
        public Object instantiateItem(ViewGroup view, int position) {  
            view.addView(images.get(position));  
            return images.get(position);  
        }  
    }  

4.ArrayAdapter
第一个参数填上下文对象
第二个参数填每个item的布局文件(注意ArrayAdapter的item布局文件只能是以TextView作为根节点的 且只能匹配一个TextView)
第三个参数填item中的内容 可以是数组或者集合

 private ListView listView;    //定义ListView用来获取到,布局文件中的ListView控件
        private String[] city = {"广州","深圳","北京","上海","香港","澳门","天津"} ;  //定义一个数组,作为数据源
        private ArrayAdapter<String> arrayAdapter;    //定义一个数组适配器对象

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView = (ListView)findViewById(R.id.listView); //获取布局文件中的ListView控件对象


        /*
         * Context context,  上下文对象
         * int resource,    items项显示的布局样式,一般是系统的布局文  android.R.layout.** (但是需要选择和ListView相适合的布局文件否则运行报错)
         * String[] objects  数组对象(数据源)
         * 
         * */

        //创建数组适配器对象,并且通过参数设置类item项的布局样式和数据源        
        arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, city);

        //把数组适配器加载到ListView控件中
        listView.setAdapter(arrayAdapter);

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值