标签:
作用:以item的形式用来显示大量的数据。
使用步骤:
1.XML中使用<ListView>标签
2.Dada —> String[]数组(数据来源)
3.ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data); –>适配器(用来将数据和控件进行绑定
4. myListView.setAdapter(adapter); –>设置适配器
PS.
simple_list_item_1 (单行显示) 只有一个TextView
simple_list_item_2 (双行显示) 有两个TextView
二.定值ListView界面 -- 使用ArrayAdapter
使用步骤:
1.定制实体类。
2.自定义item布局。
3.自定义适配器,继承ArrayAdapter。
4.重写两个方法,构造方法MyAdapter(Context context, int resource, List<T> objects)和getView()方法。
public class FruitAdapter extends ArrayAdapter<Fruit> { private int resourceId; private int num = 1; // 调用了几次的getView方法 private int num1 = 1; // 重新创建了几次的convertView private int num2 = 1; // 重用了几次的convertView 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) { Log.d("h_bl", "num="+num); num+=1; Fruit fruit = getItem(position); View view; ViewHolder viewHolder; Log.d("h_bl", "convertView="+convertView); if (convertView == null) { view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder(); viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image); viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name); view.setTag(viewHolder); // 将ViewHolder存储在View中 Log.d("h_bl", "num1="+num1); num1+=1; } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder Log.d("h_bl", "num2="+num2); num2+=1; } viewHolder.fruitImage.setImageResource(fruit.getImage()); viewHolder.fruitName.setText(fruit.getName()); return view; } class ViewHolder { ImageView fruitImage; TextView fruitName; } }
其中,
LayoutInflater.from(getContext()).inflate(resourceId, null);
inflate()作用有点类似findViewById(),寻找layout下的xml布局文件。
// 加载布局管理器 LayoutInflater inflater=LayoutInflater.from(context); // 将xml布局转化为View对象 View view=inflater.inflate(R.layout.fruit_item,null); // 利用View对象,找到布局中的控件 view.findViewById(R.id.fruit_image);
ListView的工作原理:
1、ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
2、一个新的视图被返回并显示。
总结为如下:
详见:
http://www.bkjia.com/Androidjc/1037874.html
http://www.bkjia.com/Androidjc/1037874.html
三 .使用ViewHolder提升ListView的运行效率:
作用:
1.重用convertView (转换视图) --可以理解为 被移除去的item的view。
2.对控件实例进行缓存。
滑动:
原理解释:
view.setTag(viewHolder); // 将ViewHolder存储在View中
1.将控件的实例到View中,所以说每个item的view都绑定了控件的实例,实现对控件的实例进行缓存。
2.重用convertView,并将convertView绑定的控件的实例取出,重新复制。达到重用的目的。
使用ViewHolder可能带来的问题:
http://blog.csdn.net/harvic880925/article/details/25335957
四.ListView的点击事件:
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit=fruitList.get(position); Toast.makeText(getApplicationContext(), fruit.getName(), Toast.LENGTH_SHORT).show(); } });
标签:
原文地址:http://www.cnblogs.com/H-BolinBlog/p/5269596.html