在实际的项目中,尤其listView的每个Item的布局比较复杂的时候,我们一般都要自定义自己的Adapter,要实现自己的Adapter,我们需要继承BaseAdapter类,同时要覆写其中的四个方法:
public int getCount() :该方法返回ListView中要显示的子View的数量;
public Object getItem(int position):该方法返回一个子View,即listView中的一个子条目,也可以返回自己想要的信息。
public long getItemId(int position):该方法根据Item在listview中的位置,返回其id;
public View getView(int position, View convertView, ViewGroup parent) :该方法是最重要的,也是最难理解的了,它返回的是id为position的Item布局文件对应的View,该View中的各组件可以在getView方法中配置其显示。
这里还有一个点需要说明,就是LayoutInflater类,它的inflate()方法可以根据布局文件获得其View返回值,接下来我们就可以取得该View中的各个组件,便可以为其设置资源,从而配置其显示。
一个简单的自定义实现Adapter的代码类如下:
package com.example.activity;
import com.example.activity.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MenuActivity extends Activity {
private ListView list = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
list = (ListView)findViewById(R.id.list);
MyAdapter mAdapter = new MyAdapter();
list.setAdapter(mAdapter);
}
//自定义Adapter
class MyAdapter extends BaseAdapter{
int[] images = new int[]{
R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
R.drawable.ic_launcher
};
String[] names = new String[]{
"干锅兔肉","水煮牛肉","剁椒鱼头","腊牛肉","藏香鸡",
"蒜茸蒸茄子","小炒肚丝","鳝鱼煨黄瓜","养生健康汤","鲜鱼汤"
};
String[] prices = new String[]{
"28","32","28","32","32",
"28","28","26","20","30"
};
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//该方法返回整个Item的布局View
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null){
//根据布局文件获取其view返回值
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_adapter, null);
}
//获取listview中每个Item布局文件中的的子组件的ID
ImageView image = (ImageView)convertView.findViewById(R.id.image);
TextView name = (TextView)convertView.findViewById(R.id.name_course);
TextView price_number = (TextView)convertView.findViewById(R.id.price_number);
//为对应的Item中的各个组件设置资源,从而配置其显示
image.setImageResource(images[position]);
name.setText(names[position]);
price_number.setText(prices[position]);
return convertView;
}
}
}