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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM