android适配器优化封装

                  在实际的项目开发中android原生adapter并不能满足我们的需要,而且还有严重的复用问题。因此我们需要对其进行一个的封装,这样不但可以解决复用问题,同时提高代码可读性和可维护性。

             1.首先创建一个adapter基类。以后所有的adapter都继承它。

               

             

/**
 * 
 * 
 * @author Administrator 控制滑动过程中不加载图片
 * @param <T>
 */
public abstract class BasedAdapter<T> extends BaseAdapter
{
    protected List<T> mList = new LinkedList<T>();
    
    protected Activity mActivity;
    
    protected LayoutInflater mLayoutInflater;
    
    protected Comparator<T> mCompatator; // 用于排序
    
    /**
     * 构造方法(默认不排序)
     */
    public BasedAdapter(Activity mActivity)
    {
        init(mActivity, null);
    }
    
    public BasedAdapter(Activity mActivity, Comparator<T> mCompatator)
    {
        init(mActivity, mCompatator);
    }
    
    /**
     * 初始化参数
     * 
     * @param mAbsListView
     * @param mActivity
     * @param mCompatator
     */
    private void init(Activity mActivity, Comparator<T> mCompatator)
    {
        this.mActivity = mActivity;
        this.mLayoutInflater = LayoutInflater.from(mActivity);
        this.mCompatator = mCompatator;
    }
    
    public List<T> getList()
    {
        return mList;
    }
   
    //向适配器中添加数据集合
    public void setList(List<T> list)
    {
        if (list == null)
        {
            return;
        }
        clear();
        this.mList = list;
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
    
    //向适配器中追加一个对象
    public void appendEntity(T entity)
    {
        if (entity == null)
        {
            return;
        }
        this.mList.add(entity);
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
    
   <pre name="code" class="java">    //向适配器中追加数据集合
    public void appendEntityList(List<T> list)
    {
        if (list == null)
        {
            return;
        }
        mList.addAll(list);
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
  
<pre name="code" class="java">    //向适配器中添加对象至首位

     public void appendTopEntity(T entity) 

    {
        if (entity == null)
        {
            return;
        }
        mList.add(0, entity);
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
    
//向适配器中添加数据集合至首位   
public void appendTopEntityList(List<T> list)
    {
        if (list == null)
        {
            return;
        }
        mList.addAll(0, list);
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
    
<pre name="code" class="java"><pre name="code" class="java">    //向适配器中添加对象至指定位置
 
     public void appendPositionEntity(T entity, int targetPosition) 

    {
        if (entity == null)
        {
            return;
        }
        int position = targetPosition < 0 ? 0 : (targetPosition < mList.size() ? targetPosition : mList.size()); // 保持始终插入在当前List集合中
        mList.add(position, entity);
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
    
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">    //向适配器中添加数据集合至指定位置
 
 
     public void appendPositionEntityList(List<T> list, int targetPosition) 

    {
        if (list == null)
        {
            return;
        }
        int position = targetPosition < 0 ? 0 : (targetPosition < mList.size() ? targetPosition : mList.size()); // 保持始终插入在当前List集合中
        mList.addAll(position, list);
        if (mCompatator != null)
        {
            Collections.sort(this.mList, mCompatator);
        }
        notifyDataSetChanged();
    }
    
//清空数据集
    public void clear()
    {
        mList.clear();
        notifyDataSetChanged();
    }
    
    // --------------------------BaseAdapte必须实现的方法------------------------------------
    
    @Override
    public int getCount()
    {
        return mList.size();
    }
    
    @Override
    public Object getItem(int position)
    {
        return mList.get(position);
    }
    
    @Override
    public long getItemId(int position)
    {
        return position;
    }
    
}
        2.创建具体的实例适配器,继承basedAdapter 

 

public class MyAdapter extends BasedAdapter<NotificationDTO> (此处传入集合中的对象)
{
    
    public MyAdapter (Activity mActivity)
    {
        super(mActivity);
        // TODO Auto-generated constructor stub
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup arg2)
    {
        HoldView mHoldView;
        if (convertView == null)
        {
            convertView = mLayoutInflater.inflate(R.layout.item, null);
            mHoldView = new HoldView(convertView);
            convertView.setTag(mHoldView);
        }
        else
        {
            mHoldView = (HoldView)convertView.getTag();
        }
        mHoldView.update(getList(), position);
        //item中控件的点击事件
<pre name="code" class="java">        mHoldView.addListener(getList(), position);
  return convertView; } class HoldView { private ImageView imageView; private TextView textView; public HoldView(View convertView) { imageView= (ImageView)convertView.findViewById(R.id.imageView);
textView= (TextView)convertView.findViewById(R.id.textView); } //此处记载对象中数据 @SuppressLint("ResourceAsColor") void update(List<MyDTO> MyDTOs, int position) { MyDTO = MyDTOs.get(position);

textView.setTextView("");

ImageView.setImageBitmap(""""");
}
//此处对item中的控件添加监听
void addListener(List<MyDTO> MyDTOs, int position)
{
ImageView.setOnClickListener(new OnClickListener(){
@over...
onClick(View view){

}
});
}
  } }

        这样就基本满足项目的需要了,在请求数据列表之后我们可以: 
     MyAdapter myAdapter=new MyAdapter(this);
     myAdapter.setList("将获得数据集放入适配器中");
           

        获得适配器中的数据集:

     myAdapter.getList();
       

        其他的一些方法我就不再赘述了。我封装的都比较基础,希望大家能提出一些宝贵的意见。

   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值