Android Adapter总结

Adapter相当于一个数据源,可以给AdapterView提供数据,并根据数据创建对应的UI,可以通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作为数据源。

dapter 计模式中的一种,就是适配器的意思。


  • BaseAdapter继承它需要实现较多的方法,所以也就具有较高的灵活性,是一个抽象类。
  • ArrayAdapter支持泛型操作,最为简单,只能展示一行字。BaseAdapter派生
  • SimpleAdapter有最好的扩充性,可以自定义出各种效果。
  • SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

ArrayAdapter
 
        
ListView listView = (ListView)findViewById(R.id.listView);

        String[] values = {"iPhone","小米","三星","华为","中兴","联想","黑莓","魅族"};
        List<String> list = new ArrayList<>(Arrays.asList(values));

        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
扩展

//List<String> list = Arrays.asList(values); 
 List<String> list = new ArrayList<>(Arrays.asList(values));
//Arrays.asList(values)返回的是一个只读的List,不能进行add和remove 
//new ArrayList<>(Arrays.asList(values))则是一个可写的List,可以进行add和remove 

SimpleAdapter

 ListView listView = (ListView)findViewById(R.id.listView);
        final String[] names = {"Windows","Mac OS","Linux","Android","Chrome OS"};
        final String[] descriptions = {
                "Windows是微软公司的操作系统",
                "Mac OS是苹果公司的操作系统",
                "Linux是开源免费操作系统",
                "Android是Google公司的智能手机操作系统",
                "Chrome OS是Google公司的Web操作系统"
        };
        final int[] icons = { R.drawable.windows, R.drawable.mac, R.drawable.linux 
            R.drawable.androi ,R.drawable.chrome
        };
        List<Map<String, Object>> list = new ArrayList<>();
        for(int i = 0; i < names.length; i++){
            HashMap<String, Object> map = new HashMap<>();
            map.put("name", names[i]);
            map.put("description", descriptions[i]);
            map.put("icon", icons[i]);
            list.add(map);
        }
        //每个数据项对应一个Map,from表示的是Map中key的数组
        String[] from = {"name", "description", "icon"};
        //数据项Map中的每个key都在layout中有对应的View,
        //to表示数据项对应的View的ID数组
        int[] to = {R.id.name, R.id.description, R.id.icon};
        //R.layout.item表示数据项UI所对应的layout文件
        SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.item, from, to);
        listView.setAdapter(adapter)

PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter、 FragmentStatePagerAdapter,这两个adapter都是Fragment的适配器

FragmentPagerAdapter与FragmentStatePagerAdapter的区别主要在fragment的销毁上

FragmentPagerAdapter:对于不再需要的fragment,选择调用onDetach()方法,仅销毁视图,并不会销毁fragment实例。


FragmentStatePagerAdapter:会销毁不再需要的fragment,当当前事务提交以后,会彻底的将fragmeng从当前Activity的FragmentManager中移除,state标明,销毁时,会将其onSaveInstanceState(Bundle outState)中的bundle信息保存下来,当用户切换回来,可以通过该bundle恢复生成新的fragment,也就是说,你可以在onSaveInstanceState(Bundle outState)方法中保存一些数据,在onCreate中进行恢复创建。


如上所说,使用FragmentStatePagerAdapter当然更省内存,但是销毁后新建也是需要时间的。一般情况下,如果你是制作主页面,就3、4个Tab,那么可以选择使用FragmentPagerAdapter,如果你是用于ViewPager展示数量特别多的条目时,那么建议使用FragmentStatePagerAdapter。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值