ListView的优化

 

·使用:

①public View getView(int position, View convertView, ViewGroup parent) { }中的convertView参数

②ViewHolder

可以优化ListView。

*converView:让新显示在屏幕中的item使用划出屏幕外的item的view,从而避免了创建新的view

*ViewHolder:避免每次显示一个item都要重新寻找控件。

1、   注:与上一篇《ListView视图控件与Adapter适配器的使用》博文关联

package cn.edu.sjzc;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    //定义适配器需要的数据
    private String[] name = {"不欢乐斗地主","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将"};//名字
    private int[] images = {R.mipmap.doudizhu,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang};//图片
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = findViewById(R.id.myListView);
        //使用适配器
        MyAdapter myAdapter = new MyAdapter();
        listView.setAdapter(myAdapter);//设置我们的adapter
    }
    //创建适配器类,继承BaseAdapter
    class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return name.length;//确定显示多少条item
        }

        @Override
        public Object getItem(int position) {
            return name[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }
        //得到itemview 的视图
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //使用View.inflate()方法,将一个布局转换成一个view对象
            /*View view = View.inflate(MainActivity.this, R.layout.list_item, null);//参数2:要转换的布局
            ImageView item_image = view.findViewById(R.id.item_image);
            TextView item_text = view.findViewById(R.id.item_text);*/
            //设置图片和内容
            /*item_image.setBackgroundResource(images[position]);
            item_text.setText(name[position]);//postion从0开始
            return view;*/

            /*
            * 以下是进行优化
            * */
            //创建ViewHolder
            ViewHoler viewHoler;
            if (convertView == null){//convertView为空,说明listView是刚刚加载出来的状态
                //将item的布局转换成一个view对象。类似于View的inflate()方法
                convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item,null);//from(当前应用的上下文对象).inflate(被转换的布局对象,null)
                viewHoler = new ViewHoler();//实例化
                //给放在ViewHolder里的控件赋值
                viewHoler.item_image = convertView.findViewById(R.id.item_image);
                viewHoler.item_text = convertView.findViewById(R.id.item_text);
            }else {//此时就复用convertView对象,来进行优化
                viewHoler = (ViewHoler) convertView.getTag();
            }
            //设置数据
            viewHoler.item_image.setBackgroundResource(images[position]);
            viewHoler.item_text.setText(name[position]);
            return convertView;//返回convertView
        }
    }
    //定义viewholder类
    class ViewHoler{
        //将item布局中的控件,声明在这个类中
        ImageView item_image;
        TextView item_text;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值