今天学习了BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView等等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView,因为这会涉及到ListView优化等问题!
BaseAdapter与其他Adapter有些不一样,其他的Adapter可以直接在其构造方法中进行数据的设置!
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.list_item, new String[]{"img","title","info"});
但是在BaseAdapter中需要实现一个继承自BaseAdapter的类,并且重写里面的很多方法,例
class MyAdapter extends BaseAdapter
{
private Context context;
public MyAdapter(Context context)
{
this.context = context;
}
@Override
public int getCount() {
return 0;
}
{
private Context context;
public MyAdapter(Context context)
{
this.context = context;
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
}
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
}
下面是关于getview()方法的简单加载
第一种优化:
public View getView(
int position, View convertView, ViewGroup parent) {
View item = mInflater.inflate(R.layout.list_item, null);
ImageView img = (ImageView)item.findViewById(R.id.img)
TextView title = (TextView)item.findViewById(R.id.title);
TextView info = (TextView)item.findViewById(R.id.info);
img.setImageResource(R.drawable.ic_launcher);
title.setText("Hello");
info.setText("world");
return item;
}
View item = mInflater.inflate(R.layout.list_item, null);
ImageView img = (ImageView)item.findViewById(R.id.img)
TextView title = (TextView)item.findViewById(R.id.title);
TextView info = (TextView)item.findViewById(R.id.info);
img.setImageResource(R.drawable.ic_launcher);
title.setText("Hello");
info.setText("world");
return item;
}
下面是第二种优化:
对convertView进行判断
如果convertView为空则用layoutinflater对布局进行加载,如果convertView不为空则对convertView进行重用
public View getView(
int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = LayoutInflater.from(getCONTENT().inflate(R.layout.list_item, null)));
}
TextView title = (TextView)convertView.findViewById(R.id.title);
TextView info = (TextView)ConvertView.findViewById(R.id.info);
title.setText("Hello");
info.setText("world");
return convertView;
}
if(convertView == null)
{
convertView = LayoutInflater.from(getCONTENT().inflate(R.layout.list_item, null)));
}
TextView title = (TextView)convertView.findViewById(R.id.title);
TextView info = (TextView)ConvertView.findViewById(R.id.info);
title.setText("Hello");
info.setText("world");
return convertView;
}
下面试第三种优化:
convertView+ViewHolder
class ViewHolder
{
public TextView title;
public TextView info;
}
public View getView( int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item, null);
holder.title = (TextView)item.findViewById(R.id.title);
holder.info = (TextView)item.findViewById(R.id.info);
convertView.setTag(holder);
} else
{
holder = (ViewHolder)convertView.getTag();
holder.title.setText("Hello");
holder.info.setText("World");
}
return convertView;
}
{
public TextView title;
public TextView info;
}
public View getView( int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item, null);
holder.title = (TextView)item.findViewById(R.id.title);
holder.info = (TextView)item.findViewById(R.id.info);
convertView.setTag(holder);
} else
{
holder = (ViewHolder)convertView.getTag();
holder.title.setText("Hello");
holder.info.setText("World");
}
return convertView;
}