android里面的getview方法,android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例...

实现效果:

1527827916487122.png

1527827916581946.png

主要还是ListView的优化:

基本思路:

<1>使用自定义适配器完成操作

<2>将listView进行优化处理

示例代码:package com.hsj.example.baseadapterdemo05; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.hsj.example.baseadapterdemo05.com.hsj.domain.Person; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView listView_persons; private MyAdapter adapter; private List personList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.listView_persons= (ListView) this.findViewById(R.id.listView_persons); this.personList=this.getData(); this.adapter=new MyAdapter(this.personList); this.listView_persons.setAdapter(this.adapter); } private List getData() { personList=new ArrayList<>(); for(int i=0;i<24;i++){ Person person=new Person( (R.drawable.png_01+i), "小丽"+i, 20+i ); personList.add(person); } return personList; } private final class MyAdapter extends BaseAdapter{ private List personList; public MyAdapter(List personList) { this.personList=personList; } @Override public int getCount() { return personList.size(); } @Override public Object getItem(int position) { return personList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //原始方式:没有重用条目,造成极大的资源浪费 /*//1.得到当前条目对应的数据对象 Person person=personList.get(position); //2.将布局文件转换成View 对象 View view=View.inflate(MainActivity.this,R.layout.person_item,null); //3.找到当前条目对象中相应的控件对象 ImageView imageView_header= (ImageView) view.findViewById(R.id.imageView_header); TextView textView_name= (TextView) view.findViewById(R.id.textView_name); TextView textView_age= (TextView) view.findViewById(R.id.textView_age); //4.为控件对象设置相应的值 imageView_header.setImageResource(person.getHeader()); textView_name.setText(person.getName()); //此处报异常:android.content.res.Resources$NotFoundException: String resource ID #0x14 // textView_age.setText(person.getAge()); textView_age.setText(String.valueOf(person.getAge()));*/ //1.得到当前条目对应的数据对象 Person person=personList.get(position); /* View view=null; if(convertView==null){ //2.将布局文件转换成View 对象 view=View.inflate(MainActivity.this,R.layout.person_item,null); }else{ view=convertView; } //3.找到当前条目对象中相应的控件对象 ImageView imageView_header= (ImageView) view.findViewById(R.id.imageView_header); TextView textView_name= (TextView) view.findViewById(R.id.textView_name); TextView textView_age= (TextView) view.findViewById(R.id.textView_age); //4.为控件对象设置相应的值 imageView_header.setImageResource(person.getHeader()); textView_name.setText(person.getName()); //此处报异常:android.content.res.Resources$NotFoundException: String resource ID #0x14 // textView_age.setText(person.getAge()); textView_age.setText(String.valueOf(person.getAge()));*/ /* //ListView完成了重用条目的优化操作 if(convertView==null){ //2.将布局文件转换成View 对象 convertView=View.inflate(MainActivity.this,R.layout.person_item,null); } //3.找到当前条目对象中相应的控件对象 ImageView imageView_header= (ImageView) convertView.findViewById(R.id.imageView_header); TextView textView_name= (TextView) convertView.findViewById(R.id.textView_name); TextView textView_age= (TextView) convertView.findViewById(R.id.textView_age); //4.为控件对象设置相应的值 imageView_header.setImageResource(person.getHeader()); textView_name.setText(person.getName()); //此处报异常:android.content.res.Resources$NotFoundException: String resource ID #0x14 // textView_age.setText(person.getAge()); textView_age.setText(String.valueOf(person.getAge()));*/ //ListView完成了重用条目的优化操作,继续解决重复查找控件的问题 ViewHolder viewHolder=null; if(convertView==null){ viewHolder=new ViewHolder(); //2.将布局文件转换成View 对象 convertView=View.inflate(MainActivity.this,R.layout.person_item,null); //3.找到当前条目对象中相应的控件对象 ImageView imageView_header= (ImageView) convertView.findViewById(R.id.imageView_header); TextView textView_name= (TextView) convertView.findViewById(R.id.textView_name); TextView textView_age= (TextView) convertView.findViewById(R.id.textView_age); viewHolder.imageView_header=imageView_header; viewHolder.textView_name=textView_name; viewHolder.textView_age=textView_age; //将当前条目控件封装成ViewHolder对象并和当前条目进行绑定 convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } //4.为控件对象设置相应的值 viewHolder.imageView_header.setImageResource(person.getHeader()); viewHolder.textView_name.setText(person.getName()); viewHolder.textView_age.setText(String.valueOf(person.getAge())); return convertView; } /** * 声明每一个条目中拥有的控件对象 */ class ViewHolder{ ImageView imageView_header; TextView textView_name; TextView textView_age; } } }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值