ListView的运行效率与点击事件

来源:互联网 发布:淘宝图片设计软件 编辑:程序博客网 时间:2024/05/20 07:52

    • 提升ListView的运行效率
      • ListView的缓存原理
        • 程序
    • ListView水果界面及各种效果图
        • ListView界面
        • MyFruitActivity
        • 全选和反选XML文件
        • 水果布局XML文件
        • Fruit类
        • Fruitadapter适配器
        • 结果图

提升ListView的运行效率

ListView的缓存原理

1、Adapter是ListView与数据之间的桥梁
2、ListView在开始绘制的时候,系统首先调用getCount()方法,根据返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行地绘制ListView的每一项。
3、当ListView的每一项将要显示时,都会调用Adapter的getView()方法返回一个View。
4、ListView中有多少项,就调用多少次getView()方法去创建每一项的View,这一过程是耗时操作。

程序

public class MyListViewActivity extends AppCompatActivity  {private ListView mListView;    private List<Student> mData;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);   setContentView(R.layout.activity_my_list_view);   mListView= (ListView) findViewById(R.id.listview);       initData();        LayoutInflater inflater=getLayoutInflater();        Studentadapter adapter=new Studentadapter(inflater,mData);       mListView.setAdapter(adapter);       }    private void initData() {        mData=new ArrayList<>();        Student zhangsan=new Student("张三","20","男","吃",R.mipmap.uqiwei);        Student lisi=new Student("李四","22","女","睡觉",R.mipmap.yangmi);        Student wangwu=new Student("王五","25","男","打游戏",R.mipmap.ic_launcher);        Student zhaoliu=new Student("赵六","23","女","逛街",R.mipmap.uqiwei);        for(int i=0;i<50;i++) {            mData.add(zhangsan);            mData.add(lisi);            mData.add(wangwu);            mData.add(zhaoliu);        }    }"****************************************************"public class Studentadapter extends BaseAdapter {    private List<Student> mData;    private LayoutInflater mInflater;    public Studentadapter(LayoutInflater inflater, List<Student> data) {        mInflater = inflater;        mData = data;    }    @Override    public int getCount() {        //得到ListView要显示数据的条数        return mData.size();    }    @Override    public Object getItem(int position) {        //返回索引        return position;    }    @Override    public long getItemId(int position) {        //返回索引        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        //LayoutInflater        Student student = mData.get(position);        ViewHolder viewHolder = null;        if (convertView == null) {            viewHolder = new ViewHolder();            convertView = mInflater.inflate(R.layout.simple_adapter, null);            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageview_photo);            viewHolder.textView_name = (TextView) convertView.findViewById(R.id.textview_name);            viewHolder.textView_age = (TextView) convertView.findViewById(R.id.textview_age);            viewHolder.textView_sex = (TextView) convertView.findViewById(R.id.textview_sex);            viewHolder.textView_hobby = (TextView) convertView.findViewById(R.id.textview_hobby);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        viewHolder.textView_name.setText(student.getName());        viewHolder.textView_age.setText(student.getAge());        viewHolder.textView_hobby.setText(student.getHobby());        viewHolder.textView_sex.setText(student.getSex());        viewHolder.imageView.setImageResource(student.getImg());        return convertView;    }    class ViewHolder {        TextView textView_name;        TextView textView_age;        TextView textView_sex;        TextView textView_hobby;        ImageView imageView;    }}"*******************************************"<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent" android:layout_height="match_parent">    <ImageView        android:id="@+id/imageview_photo"        android:layout_width="100dp"        android:layout_height="100dp"        android:src="@mipmap/yangmi"        /><LinearLayout    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_margin="20dp">    <TextView        android:id="@+id/textview_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="姓名"/>    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="vertical"        android:layout_marginLeft="20dp"        android:layout_marginRight="20dp"       >        <TextView            android:id="@+id/textview_age"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="年龄"/>        <TextView            android:id="@+id/textview_sex"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="性别"/>    </LinearLayout>    <TextView        android:id="@+id/textview_hobby"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="爱好"/></LinearLayout></LinearLayout>"********************************************************"public class Student {    private String name;    private String hobby;    private String  age;    private String  sex;    private int img;    public Student(String name,String age,String sex,String hobby,int img){        this.name=name;        this.age=age;        this.sex=sex;        this.hobby=hobby;        this.img=img;    }    public int getImg() {      return img;    }    public void setImg(int img) {        this.img = img;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public void setHobby(String hobby) {        this.hobby = hobby;    }    public void setAge(String age) {        this.age = age;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getSex() {        return sex;    }    public String getHobby() {        return hobby;    }    public String getAge() {        return age;    }}

结果图:这里写图片描述

ListView水果界面及各种效果图

ListView界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent" android:layout_height="match_parent">    <ListView        android:id="@+id/listview_fruit"        android:layout_width="match_parent"        android:layout_height="wrap_content">    </ListView></LinearLayout>

MyFruitActivity

public class MyFruitActivity extends AppCompatActivity {private ListView mListView;    private List<Fruit> mFruits;    private Fruitadapter adapter;    private  LayoutInflater Inflater;    private  View mHeaderView;    private Button mBtnCheckedAll;    private  View mFooterView;    private Button mBtnCheckedOver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_fruit);        mListView= (ListView) findViewById(R.id.listview_fruit);        Inflater=getLayoutInflater();        initData();        mFooterView=Inflater.inflate(R.layout.fruit_footer, null);        mHeaderView=Inflater.inflate(R.layout.fruit_header,null);        mBtnCheckedOver= (Button) mFooterView.findViewById(R.id.button_overChecked);        mBtnCheckedAll= (Button) mHeaderView.findViewById(R.id.button_allChecked);        mBtnCheckedOver.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                adapter.checkedOver();            }        });       mBtnCheckedAll.setOnClickListener(new View.OnClickListener() {           @Override           public void onClick(View v) {               //此处要全选               adapter.checkedAll();           }       });        mListView.addHeaderView(mHeaderView);       mListView.addFooterView(mFooterView);        adapter=new Fruitadapter(Inflater,mFruits);        mListView.setAdapter(adapter);        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                Log.d("myfruit","点击的水果是:"+mFruits.get(position-1).getName());                adapter.itemSelect(position-1);            }        });    }    private void initData() {  mFruits=new ArrayList<>();        for(int i=0;i<50;i++) {            Fruit apple=new Fruit("苹果",R.mipmap.pineapple);            Fruit banana=new Fruit("香蕉",R.mipmap.fbanana);            Fruit strawberry=new Fruit("葡萄",R.mipmap.fstrawberry);            mFruits.add(apple);            mFruits.add(banana);            mFruits.add(strawberry);        }    }

全选和反选XML文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent" android:layout_height="match_parent"><Button    android:id="@+id/button_allChecked"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="全选"/></LinearLayout>"********************************************************"<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent" android:layout_height="match_parent"><Button    android:id="@+id/button_overChecked"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="反选"/></LinearLayout>

水果布局XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    android:orientation="horizontal"    tools:context="com.example.administrator.mywiget.MyFruitActivity"> <CheckBox        android:id="@+id/checkbox_choose"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:focusable="false"        android:text="选择水果"/>    <ImageView        android:id="@+id/imageview_fruit"        android:layout_width="100dp"        android:layout_height="100dp"        android:src="@mipmap/peach"/>    <TextView        android:id="@+id/textview_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="苹果"        /></LinearLayout>

布局视图:这里写图片描述

Fruit类

public class Fruit {    private String name;    private int Img;    private boolean isChecked;    public boolean isChecked() {        return isChecked;    }    public void setIsChecked(boolean isChecked) {        this.isChecked = isChecked;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getImg() {        return Img;    }    public void setImg(int img) {        Img = img;    }    public Fruit(String name, int img) {        this.name = name;        Img = img;    }}

Fruitadapter适配器

public class Fruitadapter extends BaseAdapter {    private List<Fruit> mFruits;    private LayoutInflater mInflater;    private boolean[] mManagerAllCheckBox;    public Fruitadapter(LayoutInflater Inflater, List<Fruit> Fruits) {        mInflater = Inflater;        mFruits = Fruits;        //有多少条数据就有多少个checkBox        mManagerAllCheckBox = new boolean[Fruits.size()];    }    /**     * 全部选择     */    public void checkedAll(){        for(int i=0;i<mManagerAllCheckBox.length;i++){            mManagerAllCheckBox[i]=true;        }        notifyDataSetChanged();    }    public void checkedOver(){        for (int i=0;i<mManagerAllCheckBox.length;i++){            mManagerAllCheckBox[i]=!mManagerAllCheckBox[i];        }        notifyDataSetChanged();    }    public void itemSelect(int position) {        mManagerAllCheckBox[position] = !mManagerAllCheckBox[position];        notifyDataSetChanged();    }    @Override    public int getCount() {        return mFruits.size();    }    @Override    public Object getItem(int position) {        return position;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder = null;        if (convertView == null) {            convertView = mInflater.inflate(R.layout.activity_my_fruit, null);            viewHolder = new ViewHolder();            viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox_choose);            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageview_fruit);            viewHolder.textView = (TextView) convertView.findViewById(R.id.textview_name);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        Fruit fruit = mFruits.get(position);        viewHolder.imageView.setImageResource(fruit.getImg());        viewHolder.textView.setText(fruit.getName());        viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                Log.d("myFruit", "选择框发生的变化:" + isChecked);                mManagerAllCheckBox[position] = isChecked;                notifyDataSetChanged();            }        });        viewHolder.checkBox.setChecked(mManagerAllCheckBox[position]);        return convertView;    }    class ViewHolder {        CheckBox checkBox;        ImageView imageView;        TextView textView;    }}

结果图

这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 川航订机票名字写错了怎么办 亚航电子登机牌没有保存怎么办 cfa考试准考证名字有错怎么办 火车票护照号错了怎么办 国际机票名字错一个字怎么办 国际机票名字拼音错了怎么办 订机票名字写错了怎么办 亚航机票护照号写错怎么办 打发过了的奶油怎么办? 孩子生了没人带怎么办 办理退休审核未通过怎么办 整天沉迷全民k歌怎么办 吃鸡账号被误封了怎么办 手机换号了银行卡怎么办 评副高没有病房论文怎么办 收件人姓名写错了怎么办 汇款姓名写错了怎么办 在菲律宾旅游签证过期怎么办 微博转发被限制怎么办 百香果蜂蜜沉在下面怎么办 领导要潜我老婆怎么办 被领导潜了该怎么办 实习期单位领导开除我我该怎么办 泡泡袖显手臂肥怎么办 客人想吃霸王餐怎么办 在四楼上课时发生地震怎么办 学生在上课时发生地震怎么办 学生上课时发生地震怎么办 老板承诺的工资不兑现怎么办 只有本科毕业证没有学位证怎么办 孩子跟坏孩子玩怎么办 苕帚跟簸箕掉下来了怎么办 身体发烫又觉得冷怎么办 买苹果8后悔了怎么办 手机死机了怎么办不可拆卸电池 百度网盘密码忘了怎么办 空调冷凝水无法排出怎么办 转账时名字错了怎么办 打款名字错了怎么办 转账名字写错了怎么办 国际汇款汇错了怎么办