class MyAdapter extends BaseAdapter {
@Override //有多少数据数目就返回多少数目,如果返回1就只显示一条数目的view
public int getCount() {
return datas.size();
}
@Override //响应position对应的item
public Object getItem(int position) {
return datas.get(position);//return null;
}
@Override //返回position位置对应的id
public long getItemId(int position) {
return position; //return 0;
}
@Override //用来显示数据的view
public View getView(final int position, View convertView, ViewGroup parent) {
TextView tv=new TextView(MainActivity.this);//不能this,这是java基础,this在这里指的是适配器
tv.setText(position);
SYSO; // 误区:不是适配器中有多少数目(getcount())就打印多少次,是滑动到哪里才getview到哪里,打印到哪里,。
//所以如果“快速”滑动count为超级多的listview,就很可能内存溢出,就算是java中的垃圾回收机制也架不住申请内存>>释放的东西啊...解决方法与convertView有关
return tv;
}
}
看文档的技巧:listview需要adapter(然而这是有好多方法的接口!),所以我们可以找一下这个接口的子类。不用implements 接口,直接extends 接口的子“类”(不是子接口)
param:
convertView:old view to reuse。当拉动listview的时候,上面的已经看不到的view其实是进入了“缓冲区”,这个相当于历史缓存对象。
注意:应该检查它是否为空。
假如一个Listview在一个屏幕下有20个item能显示,那么当convertView是空的时候,那么它就会创建20个item,然后到21的时候,就不会创建了,就会reuse复用了刚开始创建的20个item中的第一个item的位置。其实就是“循环”利用。
xml小积累:
fastScollorEnable=“true” 可以快速滑动不报错(溢出),和上面那个有关。而且旁边有个条,滑动很快。
layout_ToRightOf="@id/"两个控件之间的关系。
singleLine="true" 设置textview为单行
ellipsize="end"() 设置tv多余的文字为...,且在后面加上...也能设置前面
listView中的奇怪现象:如果一个item为4的listview(在getview()中设置打印动作)的height是match,那么它在打印台打印四次,如果是wrap就打印十六次(不一定,但是肯定多)。
原因:match的话知道屏幕高和一个item的高,它可以计算一个屏幕能显示多少item,但是wrap就不能,于是系统就会反复校验。
普通的listview设置:在main布局中直接加上listview
高级的Listview设置:创建一个布局(一行的item),用inflater打气筒(可以通过打气筒把xml换成view)
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null){
view = View.inflate(parent.getContext(), R.layout.item_number, null); //viewgroup:可设置为null
}else {
view = convertView;
}
TextView tv_number = (TextView) view.findViewById(R.id.tv_number);
tv_number.setText(datas.get(position));
return view;
}
viewgroup:就像linearlayout布局啥的,能有自己的孩子。
ArrayAdapter:很适合很简单的Listview
直接 ArrayAdapter<String> arr=new ArrayAdapter<String>(this,xml布局(这只有一个textview都行了,连父布局都不需要),String[])
SimpleAdapter: