一、自定义MyAdapter
public class MyAdapter extends BaseAdapter { //Adapter的作用相当于是从数据到行布局的映射。这就需要传入需要显示的List数据 List<Map<String, Object>> list; //反射器 LayoutInflater inflater; //初始化反射器 public MyAdapter(Context context) { this.inflater = LayoutInflater.from(context); } //通过此方法初始化List public void setList(List<Map<String, Object>> list) { this.list = list; } //如果返回默认的0,不管你传入什么List,全部都不显示 //返回list.size();就刚好显示list长度对应的条数。 @Override public int getCount() { return list.size(); } //因为使用的是List,这里就是设置了如何从List的下标如何得到List中的数据 @Override public Object getItem(int position) { return list.get(position); } //当前这一项的id是多少?List每一项的id就是下标position @Override public long getItemId(int position) { return position; } //页面渲染时时一行一行的渲染,从position 0开始。如果这里给他返回空,页面就什么也不显示。 @Override public View getView(int position, View convertView, ViewGroup parent) { //反射器的作用就在这里,把一个xml的文本文件反射为一个View对象。 //这里是两个参数方法,还有其他参数类型的方法 //第一个参数就是传入对应的行布局的id //第二个参数应该传入父容器.实际使用时,可以不传也能正常运行 View view = inflater.inflate(R.layout.item, null); //findViewById这个方法以前是直接使用的,前面没有加对象名。其实默认的是this.findViewById //当前,view已经通过反射成为了此行布局。可以通过它来得到下级的控件 ImageView logo = view.findViewById(R.id.logo); TextView title = view.findViewById(R.id.title); TextView version = view.findViewById(R.id.version); TextView size = view.findViewById(R.id.size); //针对当前position将list的数据传给view Map map = list.get(position); logo.setImageResource((Integer) map.get("logo")); title.setText((String) map.get("title")); version.setText((String) map.get("version")); size.setText((String) map.get("size")); return view; } }
二、在MainActivity中使用
MyAdapter adapter = new MyAdapter(this); adapter.setList(list); lv.setAdapter(adapter);