BaseAdapter的使用以及优化

来源:互联网 发布:文化艺术品交易软件 编辑:程序博客网 时间:2024/05/18 00:06

今天学习了BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView等等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView,因为这会涉及到ListView优化等问题!

BaseAdapter与其他Adapter有些不一样,其他的Adapter可以直接在其构造方法中进行数据的设置!


ArrayAdapter adapter =  new ArrayAdapter(this, R.layout.list_item,new String[]{"img","title","info"});


但是在BaseAdapter中需要实现一个继承自BaseAdapter的类,并且重写里面的很多方法,例

class MyAdapter extends BaseAdapter
    {
        private Context context;
        public MyAdapter(Context context)
        {
            this.context = context;
        }
        @Override
        public int getCount() {
            return 0;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
        
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return null;
        }
       
    }

下面是关于getview()方法的简单加载
第一种优化:

        public View getView(int position, View convertView, ViewGroup parent) {
            View item = mInflater.inflate(R.layout.list_item, null);
            ImageView img = (ImageView)item.findViewById(R.id.img)
            TextView title = (TextView)item.findViewById(R.id.title);
            TextView info = (TextView)item.findViewById(R.id.info);
            img.setImageResource(R.drawable.ic_launcher);
            title.setText("Hello");
            info.setText("world");
           
            return item;
        }
下面是第二种优化:
对convertView进行判断
如果convertView为空则用layoutinflater对布局进行加载,如果convertView不为空则对convertView进行重用

      public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView == null)
            {
                convertView = LayoutInflater.from(getCONTENT().inflate(R.layout.list_item,null)));
            }
            TextView title = (TextView)convertView.findViewById(R.id.title);
            TextView info = (TextView)ConvertView.findViewById(R.id.info);
            title.setText("Hello");
            info.setText("world");
            return convertView;
        }
下面试第三种优化:
convertView+ViewHolder
    class ViewHolder
    {
        public TextView title;
        public TextView info;
    }

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView == null)
            {
                holder = new ViewHolder();
                convertView = mInflater.inflate(R.layout.list_item, null);
                holder.title = (TextView)item.findViewById(R.id.title);
                holder.info = (TextView)item.findViewById(R.id.info);
                convertView.setTag(holder);
            }else
            {
                holder = (ViewHolder)convertView.getTag();
                holder.title.setText("Hello");
                holder.info.setText("World");
            }
           
            return convertView;
        }






3 0