美文网首页
ListView之Adapter的复用

ListView之Adapter的复用

作者: 有_味 | 来源:发表于2017-12-11 17:59 被阅读23次

    Adapter之ListView的复用

    • 作用:优化空间节省使用内存

    1.初始化数据

    不管是那种复用都需要用到Adapter这个类,所以我们先新建一个类(MyAdapter)去继承Adapter同事重写Adapter的四个方法.
    代码如下↓

    1 新建MyAdapter类

    public class MyAdapter extends BaseAdapter {
    
        //返回item的数量
        @Override
        public int getCount() {
            return 0;
        }
    
        //返回第 i 个item
        @Override
        public Object getItem(int i) {
            return null;
        }
    
        //有多少个item
        @Override
        public long getItemId(int i) {
            return 0;
        }
    
        //加载布局.
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            return null;
        }
    }
    

    2.初始化数据

    • 我们知道Adapter不管是不是做复用,都需要有数据,那么我们下一步就传入所需要的数据;
    
        //初始化上下文(构造方法传入)
        private Context context;
        
        //初始化一个集合,作用是装数据(构造方法传入)
        private List<MyData> myDataList;
        
        //初始化实体类
        private MyData MyData = new MyData();
        
        //初始化布局管理器
        private LayoutInflater inflater;
        
         public ListViewAdapter(Context context, List<MyData> myDataList) {
            // Context 和 List 通过构造方法传入
            this.context = context;
            this.myDataList = myDataList;
            
            //通过上下文去获得系统的布局管理器
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        
    

    3.初始化实体类.

    public class MyData {
        
        private  String title ;
        
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    }
    
    
    • 这里的实体类只有一个title 根据自己的需求添加, 并生成getSet方法.

    4.在getView()方法中向item中设载入布局

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolder viewHolder;
            //1.复用的第一步,先判断view是为空,如果是空的,就加载布局,填入内容
            if (view == null) {
            
                //3.创建完ViewHolder后初始化ViewHolder
                viewHolder = new ViewHolder();
                
                //2.如果view是空的,直接填入内容,item完成后就可以创建ViewHolder了.
                view = inflater.inflate(R.layout.my_item, null);
                
                //4.将item中的view传递给ViewHolder
                viewHolder.tv_title = view.findViewById(R.id.title_item);
                
                //5.设置Tag();  相当于给每一个item条目做标记,放入容器中 下次拿出来直接用
                view.setTag(viewHolder);
            } else {
            
                //6.这个时候ViewHolder都是有值的了,就把刚才用过的item那出来复用.
                viewHolder = (ViewHolder) view.getTag();
            }
    
            //7.取出每个条目
            myData = myDataList.get(i);
            
            //8.设置复用后的值
            viewHolder.tv_title.setText(myData.getTitle());
            
            return view;
        }
    

    5.创建ViewHolder

     class ViewHolder {
            //初始化view
            TextView tv_title;
            
        }
    

    6.在MainActivity中使用

    //创建Adapter
    MyAdapter adapter = new MyAdapter(this,myDataList);
            //在ListView控件上设置adapter
            mListView.setAdapter(adapter);
    
    • 结语:本文如果有错请指正!

    相关文章

      网友评论

          本文标题:ListView之Adapter的复用

          本文链接:https://www.haomeiwen.com/subject/stcwixtx.html