android listview参数,Android_ListView用法

但是这样的代码还是有很多问题的,你可以在getView中打印下日志,输出创建的layout,你就会发现竟然每一行的layout都是新的,这样的话很消耗系统资源,(10行可能太少了,多搞点,在拖动的时候 就会发现了,写多少行,就给你高多少个layout)

所以Android官方 推荐用convertView+ViewHolder的方式来提高性能,这样系统只会创建当前页显示数量+1个layout,就可以是layout复用,其他的行都只用创建好的layout就可以了

优化代码如下:

class ViewHolder{//ViewHolder自己创建就好了,这是内部类,因为当前类只要MainActivity使用就好了,所以不需要新建一个class文件了

TextView mTextView;//官方的源代码中,成员变量就是这样写的

//(前面加个m这样只要看到他就知道这个变量是成员变量了,后面名字随便)

}

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView listView = (ListView) findViewById(R.id.listView1);//读取listView的

BaseAdapter adapter = new BaseAdapter()//创建一个适配器,这是一个内部类了

{

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

/*

* getView 加载每一行的时候系统会自动调用这个方法,所以要在这个方法中创建当前行样式

* 主要参数:1、position:当前行的id

*  2、convertView:是一个缓存,存取listview滑动时缓存最先消失的那个行布局,

* 后面显示的行就可以复用这个convertView了,这样就可以达到复用的效果,节省资源

*

*  3、parent:The parent that this view will eventually be attached to

* (额这是官方解释了。。。sorry~ 没用过具体怎么样我也不知道)

*/

//开始创建行,

RelativeLayout layout = null;

ViewHolder holder = null;

if(convertView == null){//当缓存为空是 创建layout

LayoutInflater inflater = getLayoutInflater();

layout = (RelativeLayout) inflater.inflate(R.layout.list_item, null);

//以上两行代码 获取每行的布局

holder = new ViewHolder();//创建holder;

holder.mTextView = (TextView) layout.findViewById(R.id.textView1);//讲获取到的行组件放入holder中

/*这里存在一个问题 layout是两个东西怎样将 layout和holder联系在一起呢?

*不用担心,View类提供了一个方法,setTag(Object obj);

*这个方法可以将holder像一个物品一样放入一个叫Tag 的袋子里

*这样就可以 复用 行布局和布局中的组件了

**/

layout.setTag(holder);

}else{//有缓存时 就直接将缓存中的convertView给layout就好了

layout = (RelativeLayout) convertView;

holder = (ViewHolder) layout.getTag();

}

//更新组件内容

holder.mTextView.setText("title"+position);//前面有说过position是代表当前行的id 从零开始计数

return layout;//一定要记得将创建好的行布局 返回给 系统,不然 你讲神马都看不到了

}

@Override

public long getItemId(int position)

{

return 0;

}

@Override

public Object getItem(int position)

{

return null;

}

@Override

public int getCount()//设置要创建多少行

{

return 10;//表示要创建10行

}

};

listView.setAdapter(adapter);//将创建的适配器(adapter)放到listview中

}

呵呵 优化好啦,这时候可以试试在打日志看看。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值