Android提高篇之Adapter的抽象整合

Android提高篇之Adapter的抽象整合

最近在学习框架的知识,想根据公司业务的需要结合前台后台的特点,整出一个手机端的通用网络框架,所以就去学习下Simple哥的博客,看了网络框架的专栏。学习了分层和重构的优缺点。突然想到自己项目中大量的自定义Adapter中有大量的重复部分,是否可以把这些部分抽出来进行集中处理呢?下面我们就来试试。

1、我们定义一个所有Adapter的父类,继承在BaseAdapter

public abstract class CustomAdapter<T> extends BaseAdapter {
        private List<T> listData;
        public CustomAdapter(List<T> listData) {
            this.listData = listData;
        }
        @Override
        public int getCount() {
            return listData == null ? 0 : listData.size();
        }

        @Override
        public Object getItem(int arg0) {
            return listData.get(arg0);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public abstract View getView(int position, View convertView, ViewGroup parent);

    }

我们将getCount()、getItem()、getItemId()方法抽象出来进行处理,这样我们就减少了针对每个类的处理,减少代码的冗余度。我们只需要针对每个Adapter对getView()方法进行特殊处理即可。下面我们继承该CustomAdapter来自定义一个MyAdapter填充ListView。

2、自定义MyAdapter,进行填充数据处理。

public class MyAdapter extends CustomAdapter<String>{
        private Context mContext;
        private List<String> list;
        public MyAdapter(Context context,List<String> listData) {
            super(listData);
            this.mContext = context;
            this.list = listData;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.text_layout, null);
            TextView tv_text = (TextView) convertView.findViewById(R.id.tv_name);
            tv_text.setText(list.get(position));
            return convertView;
        }
    }

通过上面的整合,我们的MyAdapter中是不是少了很多冗余的代码,看起来也方便多了。下面就看看使用。

3、在MainActivity中进行使用。

public class MainActivity extends Activity {
        private ListView listView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            List<String> list = new ArrayList<String>();
            for(int i=0;i<30;i++){
                list.add("测试用例:" + i);
            }
            listView = (ListView) findViewById(R.id.listView);
            final MyAdapter adapter = new MyAdapter(getApplication(), list);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    Toast.makeText(getApplication(), adapter.getItem(arg2).toString(), 
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

我们看下效果图:
result

简单的一个demo,算作学习框架基础的开始吧!确实提高了代码的简洁性,方便很多。再次向大家推荐学习下Simple哥的博客。

github地址,欢迎大家star

源码下载地址

作者:mr_dsw 欢迎转载,与人分享是进步的源泉!

转载请保留地址:http://blog.csdn.net/mr_dsw

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值