Android适配器之ArrayAdapterSimpleAdapter和BaseAdapter的简单用法

Posted YaoYong_BigData

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android适配器之ArrayAdapterSimpleAdapter和BaseAdapter的简单用法相关的知识,希望对你有一定的参考价值。

1.ArrayAdapter

只可以简单的显示一行文本

代码片段:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
                this,  
                R.layout.item,//只能有一个定义了id的TextView  
                data);//data既可以是数组,也可以是List集合  


2.SimpleAdapter

SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文

参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的getData(),类型要与上面的一致,每条项目要与from中指定条目一致

参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id

参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称

参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应

代码片段:

List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;  
for(int i =0; i < lengh; i++)       
    Map<String,Object> item = new HashMap<String,Object>();      
    item.put("image", R.drawable.portrait);      
    item.put("title", mListTitle[i]);      
    item.put("text", mListStr[i]);      
    mData.add(item);       
      
SimpleAdapter adapter = new SimpleAdapter(  
                this,  
                mData,  
                R.layout.item,      
                new String[]"image","title","text",  
                new int[]R.id.image,R.id.title,R.id.text); 



3.BaseAdapter

可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。

代码片段:

private class MyListAdapter extends BaseAdapter    
        private Context mContext;    
        private int[] colors=new int[]0xff626569,0xff4f5257 ;    
         public MyListAdapter(Context context)    
             mContext=context;    
             
        @Override    
        public int getCount()     
            // TODO Auto-generated method stub    
            return mListText.length;    
            
    
        @Override    
        public Object getItem(int position)     
            // TODO Auto-generated method stub    
            return position;    
            
    
        @Override    
        public long getItemId(int position)     
            // TODO Auto-generated method stub    
            return position;    
            
    
        @Override    
        public View getView(int position, View convertView, ViewGroup parent)     
            ImageView image=null;  //这些控件可以单独封装成一个类(Holder),便于优化  
            TextView title=null;    
            TextView  content=null;    
            if(convertView==null)    
                convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);    
                image=(ImageView) convertView.findViewById(R.id.color_image);    
                title=(TextView) convertView.findViewById(R.id.color_title);    
                content=(TextView) convertView.findViewById(R.id.color_text);    
               
            int colorPos=position%colors.length;    
            convertView.setBackgroundColor(colors[colorPos]);    
            title.setText(mListTitle[position]);    
            content.setText(mListText[position]);    
            image.setImageResource(R.drawable.portrait);    
                
            return convertView;    
            
            
        
  
--------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----  
  
  
 public class MyBaseAdapter extends BaseAdapter  
       
           private LayoutInflater mInflater;  
            public MyAdapter(Context context)  
               this.mInflater = LayoutInflater.from(context);  
            
            @Override  
           public int getCount()   
                // TODO Auto-generated method stub  
                return mData.size();  
              
       
            @Override  
            public Object getItem(int arg0)   
                // TODO Auto-generated method stub  
                return null;  
             
       
            @Override  
            public long getItemId(int arg0)   
                // TODO Auto-generated method stub  
                return 0;  
              
       
            @Override  
            public View getView(int position, View convertView, ViewGroup parent)   
                   
                ViewHolder holder = null;  
                if (convertView == null)   
                    holder=new ViewHolder();   
                    convertView = mInflater.inflate(R.layout.vlist2, null);  
                    holder.img = (ImageView)convertView.findViewById(R.id.img);  
                    holder.title = (TextView)convertView.findViewById(R.id.title);  
                    holder.info = (TextView)convertView.findViewById(R.id.info);  
                    holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);  
                    convertView.setTag(holder);  
                       
                else                        
                    holder = (ViewHolder)convertView.getTag();  
                  
                holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));  
                holder.title.setText((String)mData.get(position).get("title"));  
                holder.info.setText((String)mData.get(position).get("info"));  
                //给每一个列表后面的按钮添加响应事件  
                holder.viewBtn.setOnClickListener(new View.OnClickListener()   
                    @Override  
                    public void onClick(View v)   
                        showInfo();                  
                      
                );  
  
                return convertView;  
              
        ------------  
        public final class ViewHolder  
            public ImageView img;  
            public TextView title;  
            public TextView info;  
            public Button viewBtn;  
          


以上是关于Android适配器之ArrayAdapterSimpleAdapter和BaseAdapter的简单用法的主要内容,如果未能解决你的问题,请参考以下文章

Android进阶之通用RecyclerView适配器打造方法

Android进阶之通用RecyclerView适配器打造方法

android之版本特点

Android适配器之DataModifyHelper数据操作类的封装

Android dataBinding 之 配合使用BaseAdapter适配器

Android基础——快速开发之打造万能适配器