ListView抽取及优化(上)
来源:互联网 发布:c语言中开根号 编辑:程序博客网 时间:2024/05/17 04:46
在App开发中,ListView控件的出现与使用应该不少。假如程序中现在有20个ListView,那么对应的适配器Adapter,以及Adapter里面的ViewHolder就会有20个。这样程序会显得特别冗余,复用性差的要死!
首先我先带着代价回顾一下传统的ListView写法,之后在一步一步优化!
传统的ListView写法应该是大家比较熟悉的
步骤:
1.创建ListView控件
<!-- activity_main.xml --><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.listviewoptimization.MainActivity" > <ListView android:id="@+id/listView_show" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView></RelativeLayout>
2.创建一会在Adapter中要用到的listview的item布局
<!-- listview_item.xml --><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp"> <ImageView android:id="@+id/imageView_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:layout_alignParentTop="true" android:background="@drawable/ic_launcher" /> <TextView android:id="@+id/textView_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imageView_show" android:layout_alignParentLeft="true" android:layout_marginBottom="14dp" android:layout_marginLeft="20dp" android:text="传统的ListView" /></RelativeLayout>
3.创建item对应的JavaBean,方便封装数据
public class InfoBean { private String title;//item的标题 private String image;//item的图片 public InfoBean() { super(); } public InfoBean(String title, String image) { super(); this.title = title; this.image = image; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getImage() { return image; } public void setImage(String image) { this.image = image; }}
4.创建Adapter,传统的写法通常都是继承BaseAdapter的,这个代码就不过多的解释了,都是老代码,估计你写的比我次数都多!
public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; private Context mContext; private List<InfoBean> mData; public MyAdapter(Context context,List<InfoBean> data) { this.mContext = context; this.mData = data; this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh = null; if(convertView == null) { vh = new ViewHolder(); convertView = mInflater.inflate(R.layout.listview_item, parent, false); vh.textView_show = (TextView)convertView.findViewById(R.id.textView_show); vh.imageView_show = (ImageView)convertView.findViewById(R.id.imageView_show); convertView.setTag(vh); } else { vh = (ViewHolder)convertView.getTag(); } //给传来的值设置上 vh.textView_show.setText(mData.get(position).getTitle()); vh.imageView_show.setBackgroundResource(R.drawable.ic_launcher); return convertView; } class ViewHolder { TextView textView_show; ImageView imageView_show; }}
5.最后在MainActivity中三个步骤搞定,初始化ListView控件,初始化数据源,初始化数据适配器并setAdapter绑定
public class MainActivity extends Activity { protected ListView listView_show; private List<InfoBean> mData; private MyAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView_show = (ListView)this.findViewById(R.id.listView_show); initData(); listView_show.setAdapter(mAdapter); } /** * 初始化操作 */ private void initData() { //初始化数据 mData = new ArrayList<InfoBean>(); for(int x = 1; x <= 10; x++) { //这里的图片地址我在Adapter里就用ic_luncher代替了,假装传一下... InfoBean bean = new InfoBean("标题" + x,"http://www.drawable.png..."); mData.add(bean); } //初始化数据适配器 mAdapter = new MyAdapter(MainActivity.this,mData); }}
就以上这些代码,如果开发中不进行抽取,效果也会实现,但让人看着非常的不爽!这篇文章就当带着大家复习了一下吧,下一篇中会正式的进入到主题,介绍ViewHolder的抽取优化
1 0
- ListView抽取及优化(上)
- Android ListView封装(代码优化):抽取方法共性,封装 BaseAdapter 和 ViewHolder
- android:ListView下拉刷新上拉加载更多(PullToRefresh框架抽取)
- Android MVP+Adapter+ViewHolder抽取-ListView最终优化
- ListView的优化使用-抽取ViewHolder以及adapter类
- listview原理及优化
- ListView原理及优化
- listView的优化使用方法(上)
- android listview优化及原理
- ListView的优化及显示
- ListView 的优化及使用
- ListView使用及性能优化
- ListView常用技巧及优化
- ListView优化及万能适配器
- ListView 优化及分页加载
- ListView的使用及优化
- ListView的适配器及优化
- 图片ListView及性能优化
- Spring注入方式介绍
- [概率DP] LightOJ 1151 - Snakes and Ladders
- 获取录音文件时长
- OC--KVC、KVO
- Evolution进展
- ListView抽取及优化(上)
- 理解RESTful架构
- Spring 接口注入
- 推荐13款JavaScript图形和图表绘制工具
- 编译安装apache
- iOS 最新版 CocoaPods 的安装流程
- jsp的7个动作指令
- 软件行业工作一年的感悟
- spring框架学习(一)