ListView的另一种可读性更强的ViewHolder模式写法
2014-01-05 19:56
357 查看
常见的写法是这样的:
但是可读性不好,convertView怎么会当成getView的返回值呢?所以以下是一种更好的写法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if( convertView == null ) {
View view = getLayoutInflater().inflate( R.layout.line, null );
ImageView imageView = (ImageView) view.findViewById( R.id.imageView );
TextView textView = (TextView) view.findViewById( R.id.textView );
viewHolder = new ViewHolder();
viewHolder.imageView = imageView;
viewHolder.textView = textView;
view.setTag( viewHolder );
viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
viewHolder.textView.setText( arr[ position ] + "");
return view;
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
viewHolder.textView.setText( arr[ position ] + "");
return convertView;
}
}
因为convertView只是指向一块内存区域,它保存着已显示过的View。只有ListView没超出屏幕时,convertView才为空。如果超出了,convertView就有东西了。
附:ViewHolder如下:
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if( convertView == null ) { convertView = getLayoutInflater().inflate( R.layout.line, null ); ImageView imageView = (ImageView) convertView.findViewById( R.id.imageView ); TextView textView = (TextView) convertView.findViewById( R.id.textView ); viewHolder = new ViewHolder(); viewHolder.imageView = imageView; viewHolder.textView = textView; convertView.setTag( viewHolder ); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.imageView.setImageResource( R.drawable.ic_launcher ); viewHolder.textView.setText( arr[ position ] + ""); return convertView; }
但是可读性不好,convertView怎么会当成getView的返回值呢?所以以下是一种更好的写法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if( convertView == null ) {
View view = getLayoutInflater().inflate( R.layout.line, null );
ImageView imageView = (ImageView) view.findViewById( R.id.imageView );
TextView textView = (TextView) view.findViewById( R.id.textView );
viewHolder = new ViewHolder();
viewHolder.imageView = imageView;
viewHolder.textView = textView;
view.setTag( viewHolder );
viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
viewHolder.textView.setText( arr[ position ] + "");
return view;
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.imageView.setImageResource( R.drawable.ic_launcher );
viewHolder.textView.setText( arr[ position ] + "");
return convertView;
}
}
因为convertView只是指向一块内存区域,它保存着已显示过的View。只有ListView没超出屏幕时,convertView才为空。如果超出了,convertView就有东西了。
附:ViewHolder如下:
class ViewHolder { TextView textView; ImageView imageView; }
相关文章推荐
- 【Android UI】ListView使用ViewHolder模式提高效率
- 摆脱ViewHolder,一种无需ViewHolder的高效ListView写法
- Android中优化ListView的ViewHolder模式
- Android中ViewHolder模式超简洁写法(一劳永逸)
- ViewHolder模式超简洁写法
- 通用适配器(一)── 适用于 ListView、GridView 的 CommonBaseAdapte(ViewHolder 模式)
- ListView中的ViewHolder模式及其作用
- 【工具类】ViewHolder模式超简洁写法
- ListView之BaseAdapter的基本使用以及ViewHolder模式
- ViewHolder模式超简洁写法,绝对精彩!
- ListView优化的时候ViewHolder的简洁写法
- ViewHolder模式超简洁写法
- Android笔记之ListView的ViewHolder超简洁写法
- Android ViewHolder模式简洁封装写法
- viewHolder模式简洁写法
- 说说ViewHolder的另一种写法
- android ViewHolder模式超简洁写法
- ListView之BaseAdapter的基本使用以及ViewHolder模式
- android ViewHolder模式超简洁写法
- android ListView优化之ViewHolder的超简洁写法