【Android】ListView的基础学习

 
 
 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:
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值