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适配器的理解

原文地址:https://www.cnblogs.com/zhaoyucong/p/6110100.html