自定义适配器:BaseAdapter
BaseAdapter
定义: 基本适配器的抽象类,且是ArrayAdapter、SimpleAdapter的父类
功能:用于实现复杂的数据显示
需要实现的方法
public int getCount() 返回数据源的大小
public long getItemId(int position) 返回指定位置的item控件id
public Object getItem(int position) 返回指定位置的数据
public View getView(int position,View convertView,ViewGroup parent) 返回指定位置的控件
ListView的优化:
>1,布局xml文件 listView的高度 固定 match_parent 减少getView的次数
>2,判断convertView是否为null 如果为空得话 使用布局加载器 去创建一个view
//如果不为空的话 直接拿来使用
>3.//将ViewHold保存到convertView中 convertView.setTag(viewHold);
//将ViewHold从convertView中直接拿出来使用viewHold = (ViewHold) convertView.getTag();
Java代码
import java.util.List;
import android.R.xml;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.qianfeng.day08_baseadaptertest.R;
import com.qianfeng.day08_baseadaptertest.modle.Data;
public class MyAdapter extends BaseAdapter{
private List<Data> list;
private Context context;
public MyAdapter(List<Data> list,Context context){
this.list = list;
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.i("==getView1==>", "==position==>"+position);
Log.i("==getView2==>", "==convertView==>"+convertView);
// View view = LayoutInflater.from(context).inflate(R.layout.item, null);
// ImageView iv = (ImageView) view.findViewById(R.id.iv);
// TextView titleViw = (TextView) view.findViewById(R.id.titleView);
// TextView descView = (TextView) view.findViewById(R.id.descView);
// TextView dateView = (TextView) view.findViewById(R.id.dateView);
//
// Data data = list.get(position);
// iv.setImageResource(data.getImgUrl());
// titleViw.setText(data.getTitle());
// descView.setText(data.getDesc());
// dateView.setText(data.getDate());
//
// return view;
// //2
// //判断convertView是否为null 如果为空得话 使用布局加载器 去创建一个view
// //如果不为空的话 直接拿来使用
// if(convertView == null){
// convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
// }
// ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
// TextView titleViw = (TextView) convertView.findViewById(R.id.titleView);
// TextView descView = (TextView) convertView.findViewById(R.id.descView);
// TextView dateView = (TextView) convertView.findViewById(R.id.dateView);
//
// Data data = list.get(position);
// iv.setImageResource(data.getImgUrl());
// titleViw.setText(data.getTitle());
// descView.setText(data.getDesc());
// dateView.setText(data.getDate());
//
// return convertView;
//第三种
ViewHold viewHold;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
viewHold = new ViewHold();
viewHold.iv = (ImageView) convertView.findViewById(R.id.iv);
viewHold.titleViw = (TextView) convertView.findViewById(R.id.titleView);
viewHold.descView = (TextView) convertView.findViewById(R.id.descView);
viewHold.dateView = (TextView) convertView.findViewById(R.id.dateView);
//将ViewHold保存到convertView中
convertView.setTag(viewHold);
}
//将ViewHold从convertView中直接拿出来使用
viewHold = (ViewHold) convertView.getTag();
Data data = list.get(position);
viewHold.iv.setImageResource(data.getImgUrl());
viewHold.titleViw.setText(data.getTitle());
viewHold.descView.setText(data.getDesc());
viewHold.dateView.setText(data.getDate());
return convertView;
}
class ViewHold{
ImageView iv;
TextView titleViw;
TextView descView;
TextView dateView;
}
}