ListView的基础学习

来源:互联网 发布:python两个数组相减 编辑:程序博客网 时间:2024/05/16 12:12
 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:
0 0
原创粉丝点击