1、自定制ListView
(关键还是在Adapter,ListView只是简单的调用)
Adapter实现:把数据加载到子项布局里面去。
Adapter的构造函数有三个参数:上下文,子项布局,数据
2.子项布局类
3.在MyAdapter类里的getView()里实现把数据放到子项布局里(这是关键)
public class FruitAdapter extends ArrayAdapter<Fruit> {
private int resourceId;//在FruitAdapter的构造函数里,获得子项布局资源
public FruitAdapter(Context context, int resource, List<Fruit> objects) {
super(context, resource, objects);
resourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
ImageView imageView = (ImageView)view.findViewById(R.id.image_view);
TextView textView = (TextView)view.findViewById(R.id.text_view);
imageView.setImageResource(fruit.getImageId());
textView.setText(fruit.getName());
return view;
}
}
在MainActivity里
private List<Fruit> fruitList = new ArrayList<Fruit>();
initFruitList();
FruitAdapter adapter = new FruitAdapter(MainActivity.this,R.layout.list_item,fruitList);
ListView listView = (ListView)findViewById(R.id.list_view);
listView.setAdapter(adapter);
2、给ListView的item添加事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fruit fruit = fruitList.get(i);//获得点击的Fruit实例
Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show();
}
});