首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ViewHolder简要写法

2014-01-22 
ViewHolder简洁写法本文参考至:http://www.eoeandroid.com/thread-321547-1-1.html以前的viewHolder一般的

ViewHolder简洁写法
本文参考至:http://www.eoeandroid.com/thread-321547-1-1.html


以前的viewHolder一般的写法是:
???? ???ViewHolder holder = null;
???? ???if(convertView == null){
???? ?? ?? ?? ? convertView = mInflater.inflate(R.layout.xxx null);
???? ?? ?? ?? ? holder = new ViewHolder();
???? ?? ?? ?? ? holder.tvXXX = (TextView)findViewById(R.id.xxx);
???? ?? ?? ?? ? //...一连串的findViewById
???? ???}
???? ???else{
???? ?? ?? ?? ? holder = (ViewHolder) convertView.getTag();??
???? ???}
???? ????
???? ????
???? ????
???? ???private static class ViewHolder{
???? ?? ?? ?? ? TextView tvXXX;
???? ?? ?? ?? ? //很多view的定义
???? ???}

现在可以试着用这种方式:
public class ViewHolder {
??? // I added a generic return type to reduce the casting noise in client code
??? @SuppressWarnings("unchecked")
??? public static <T extends View> T get(View view, int id) {
???? ???SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
???? ???if (viewHolder == null) {
???? ?? ?? ?viewHolder = new SparseArray<View>();
???? ?? ?? ?view.setTag(viewHolder);
???? ???}
???? ???View childView = viewHolder.get(id);
???? ???if (childView == null) {
???? ?? ?? ?childView = view.findViewById(id);
???? ?? ?? ?viewHolder.put(id, childView);
???? ???}
???? ???return (T) childView;
??? }
}

其中getView的写法可以如下
@Override
public View getView(int position, View convertView, ViewGroup parent) {
?
??? if (convertView == null) {
???? ???convertView = LayoutInflater.from(context)
???? ?? ? .inflate(R.layout.banana_phone, parent, false);
??? }
?
??? ImageView bananaView = ViewHolder.get(convertView, R.id.banana);
??? TextView phoneView = ViewHolder.get(convertView, R.id.phone);
?
??? BananaPhone bananaPhone = getItem(position);
??? phoneView.setText(bananaPhone.getPhone());
??? bananaView.setImageResource(bananaPhone.getBanana());
?
??? return convertView;
}

热点排行