您的位置:首页 > 其它

BaseAdapter的简单封装

2016-04-20 16:48 316 查看
继承BaseAdapter的抽象类(根据需求进行添加方法)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104101eb845106107108109110111112113
public
 
abstract
 
class
 
MyBaseAdapter<T> 
extends
 
BaseAdapter{
 
    
public
 
List<T> list;
    
public
 
Context context;
 
    
public
 
MyBaseAdapter(Context context,List<T> list) {
        
this
.list = list;
        
this
.context = context;
    
}
 
    
@Override
    
public
 
int
 
getCount() {
        
return
 
list != 
null
 
? list.size() : 
0
;
    
}
 
    
@Override
    
public
 
Object getItem(
int
 
position) {
        
return
 
list.get(position);
    
}
 
    
@Override
    
public
 
long
 
getItemId(
int
 
position) {
        
return
 
position;
    
}
 
    
/**
     
*入口,第一步
     
*/
    
@Override
    
public
 
View getView(
int
 
position, View convertView, ViewGroup parent) {
        
//实现抽象方法创建ViewHolder,并返回ViewHolder执行getItemView方法返回的视图
        
return
 
createViewHoler(position, convertView, parent).getItemView();
    
}
 
    
/**
     
* 创建ViewHolder的抽象方法
     
* @param position
     
* @param convertView
     
* @param parent
     
* @return
     
*/
    
public
 
abstract
 
ViewHolder createViewHoler(
int
 
position, View convertView, ViewGroup
parent);
 
    
/**
     
* ViewHolder类
     
*/
    
public
 
static
 
class
 
ViewHolder {
        
private
 
View convertView;
        
//保存View的map
        
private
 
HashMap<Integer, View> views;
        
private
 
Context context;
 
        
/**
         
*第四步:ViewHolder的私有构造器
         
*/
        
private
 
ViewHolder(Context context, View convertView) {
            
this
.convertView = convertView;
            
this
.views = 
new
 
HashMap<>();
            
this
.context = context;
            
//设置tag
            
convertView.setTag(
this
);
        
}
 
        
/**
         
*第三步:提供给外界获取ViewHolder的方法(使用优化重用布局)
         
*/
        
public
 
static
 
ViewHolder getHolder(View convertView, Context context, 
int
 
layoutId, ViewGroup parent) {
            
if
 
(convertView == 
null
) {
                
LayoutInflater inflater = LayoutInflater.from(context);
                
convertView = inflater.inflate(layoutId, parent, 
false
);
                
return
 
new
 
ViewHolder(context, convertView);
            
else
 
{
                
return
 
(ViewHolder) convertView.getTag();
            
}
        
}
 
        
/**
         
* findById方法
         
* @param id
         
* @param <T>
         
* @return
         
*/
        
public
 
<T 
extends
 
View> T findById(
int
 
id) {
            
View view = views.get(id);
            
if
 
(view == 
null
) {
                
view = convertView.findViewById(id);
                
views.put(id, view);
 
            
else
 
{
                
view = views.get(id);
            
}
            
return
 
(T) view;
        
}
 
        
/**
         
* 设置TextView文本方法
         
* @param id
         
* @param txt
         
*/
        
public
 
void
 
setText(
int
 
id, String txt) {
            
TextView tv = findById(id);
            
tv.setText(txt);
        
}
 
        
/**
         
* 返回整个视图
         
* @return
         
*/
        
public
 
View getItemView() {
            
return
 
convertView;
        
}
    
}
}
继承封装的适配器代码
12345678910111213141516171819202122232425262728
public
 
class
 
TestAdapter 
extends
 
MyBaseAdapter{
 
    
private
 
List<String> list;
    
protected
 
Context context;
 
    
public
 
TestAdapter(Context context, List<String> list) {
        
super
(context, list);
        
this
.list = list;
        
this
.context = context;
    
}
 
    
/**
     
* 第二步
     
* @param position
     
* @param convertView
     
* @param parent
     
* @return
     
*/
    
@Override
    
public
 
ViewHolder createViewHoler(
int
 
position, View convertView, ViewGroup parent) {
        
ViewHolder holder = ViewHolder.getHolder(convertView,context, R.layout.simple_fragment,parent);
        
//findById方法
        
TextView tv = holder.findById(R.id.tv_sp_fm);
        
//设置TextView文本方法
        
holder.setText(R.id.tv_sp_fm,list.get(position));
        
return
 
holder;
    
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息