android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例
生活随笔
收集整理的這篇文章主要介紹了
android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現效果:
主要還是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<Person> personList;@Overrideprotected 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<Person> 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<Person> personList;public MyAdapter(List<Person> personList) {this.personList=personList;}@Overridepublic int getCount() {return personList.size();}@Overridepublic Object getItem(int position) {return personList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}} }總結
以上是生活随笔為你收集整理的android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿勒泰自驾到绥化红星油费
- 下一篇: 汽车空调上面显示E-C是什么意思?