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();
}
});
}
}
我们看下效果图:
简单的一个demo,算作学习框架基础的开始吧!确实提高了代码的简洁性,方便很多。再次向大家推荐学习下Simple哥的博客。
作者:mr_dsw 欢迎转载,与人分享是进步的源泉!
转载请保留地址:http://blog.csdn.net/mr_dsw