zoukankan      html  css  js  c++  java
  • SimpleAdapter与baseAdapter的使用语法与区别

    一.SimpleAdapter与baseAdapter的区别

    它们两都是Android里的适配器,充当数据和界面之间的桥梁,用SimpleAdapter、baseAdapter的实现效果都几乎是一样,SimpleAdapter适配器使用的数据结构是HashMap,这意味着,如果需要操作的数据对象结构过于复杂时,需要写大量的相关转化代码,程序的效率和可维护性都会变的很低,但是它完全不用考虑缓存弄到应用程序卡死的问题,而且代码会与页面代码耦合,无法切换页面,反过来baseAdapter却是需要写清除缓存代码的,而且baseadapter代码会相对来说会简洁清晰页面与代码不会耦合,所以使用baseadapter会让代码变得简捷效率更加灵活操作

    二.SimpleAdapter的使用

    MainActivity.java(ps:这里的代码只提供参考学习,布局代码就不一一列举出来了!)

    public class MainActivity extends Activity {
    
        private SimpleAdapter sa;
        private ListView lv;
        private List<Map<String,Object> > messageList = new ArrayList<Map<String,Object>>();
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.weixin);
    
            //模拟读取数据库或者互联网
            for (int i = 0; i < 1000; i++) {
                //定义一个界面与数据的混合体,一个item代表一行记录
                Map<String,Object> item  = new HashMap<String,Object>();
                //一行记录,包含多个控件
                item.put("tou", R.drawable.tou1);
                item.put("userName", "姓名"+i);
                item.put("lastMessage", "内容");
                item.put("datetime","11月28日");
                messageList.add(item);
            }
            
            lv = (ListView)findViewById(R.id.listView1);
            sa = new SimpleAdapter(this,
                    messageList,//data 不仅仅是数据,而是一个与界面耦合的数据混合体
                    R.layout.listview_item_layout,
                    new String[] {"tou","userName","lastMessage","datetime"},//from 从哪里来
                    new int[] {R.id.imageView1,R.id.tv_userName,R.id.tv_lastMessage,R.id.tv_datetime}//to 到那里去
                    );
            lv.setAdapter(sa);
            lv.setOnItemClickListener(new OnItemClickListener() {
                //为Item配置单击监听,单击时改变姓名并吐司
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    Map<String,Object> item = messageList2.get(position);
                    item.put("userName", "名字"+position);
                    sa.notifyDataSetChanged();
                    Toast.makeText(MainActivity.this, (String)item.get("userName"), Toast.LENGTH_SHORT).show();
                }
            });
        }
    }                

    三.baseAdapter的使用

    MainActivity.java(ps:这里的代码只提供参考学习,布局代码就不一一列举出来了!)

    public class MainActivity extends Activity {
    
        private ListView lv;
        private List<Message> messageList = new ArrayList<Message>();
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.weixin);
            //模拟读取数据库或者互联网
            for (int i = 0; i < 1000; i++) {
                Message m = new Message();
                m.setTou1("xxx");
                m.setUserName("姓名"+i);
                m.setLastMessage("内容");
                m.setDatetime("11月28日");
                messageList.add(m);
            }
            lv = (ListView)findViewById(R.id.listView1);
            //简单理解为VC绑在一起
            // baseAdapter,店长五星级推荐
            lv.setAdapter( new BaseAdapter(){
                //返回多少条记录
                @Override
                public int getCount() {
                    // TODO Auto-generated method stub
                    return messageList.size();
                }
                //每一个item项,返回一次界面
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    View view = null;
                    //布局不变,数据变
                    //如果缓存为空,我们生成新的布局作为1个item
                    if(convertView==null){
                        Log.i("info:", "没有缓存,重新生成"+position);
                        LayoutInflater inflater = MainActivity.this.getLayoutInflater();
                        //因为getView()返回的对象,adapter会自动赋给ListView
                        view = inflater.inflate(R.layout.listview_item_layout, null);
                    }else{
                        Log.i("info:", "有缓存,不需要重新生成"+position);
                        view = convertView;
                    }
                    Message m = messageList.get(position);
                    
                    TextView tv_userName = (TextView)view.findViewById(R.id.tv_userName);
                    tv_userName.setText(  m.getUserName()  );
                    tv_userName.setTextSize(15);
                    
                    TextView tv_lastMessage = (TextView)view.findViewById(R.id.tv_lastMessage);
                    tv_lastMessage.setText(  m.getLastMessage()  );
                    tv_lastMessage.setTextSize(12);
                    
                    TextView tv_datetime = (TextView)view.findViewById(R.id.tv_datetime);
                    tv_datetime.setText( m.getDatetime()  );
                    tv_datetime.setTextSize(12);
    
                    return view;
                }
                @Override
                public Object getItem(int position) {
                    // TODO Auto-generated method stub
                    return null;
                }
                @Override
                public long getItemId(int position) {
                    // TODO Auto-generated method stub
                    return 0;
                }
            } );
        }
    }

    以上就是我对SimpleAdapter、baseAdapter适配器的理解

  • 相关阅读:
    cnpm 下载
    WebSocket协议 8 问
    ECMAScript6笔记
    js-scroll判断页面是向上滚动还是向下滚动
    JS高级. 06 缓存、分析解决递归斐波那契数列、jQuery缓存、沙箱、函数的四种调用方式、call和apply修改函数调用方法
    JS高级. 05 词法作用域、变量名提升、作用域链、闭包
    JS高级. 04 增删改查面向对象版歌曲管理、递归、
    JS高级. 03 混入式继承/原型继承/经典继承、拓展内置对象、原型链、创建函数的方式、arguments、eval、静态成员、实例成员、instanceof/是否在同一个原型链
    【Semantic Segmentation】U-Net: Convolutional Networks for Biomedical Image Segmentation 论文解析(转)
    【Semantic segmentation Overview】一文概览主要语义分割网络(转)
  • 原文地址:https://www.cnblogs.com/zhaoyucong/p/6110100.html
Copyright © 2011-2022 走看看