BaseAdapter是使用得比较多的一个ListView、GridView、Spinner、RecyclerView等控件适配器,通过重写getView方法,展示自定义视图。BaseAdapter继承Object,实现接口ListAdapter、SpinnerAdapter,必须掌握BaseAdater的四个抽象方法:getItem(int),getItemId(int),getCount(),getView(int,View,ViewGroup)
给ListView设置BaseAdapter,绑定列表数据。在钊林IT其中的一篇文章里详细介绍过接口实现的三种方式,这里以“匿名类实现法”为例。在布局文件中使用ListView控件,然后在Activity类文件中获取ListView控件,最后使用BaseAdapter绑定数据
运行项目的效果,在ListView列表中展示四条数据内容。在上面BaseAdapter简单使用的基础上添加四个常用的方法:
BaseAdapter常用的四个方法:notifyDataSetChanged(),提醒依附的监视器底层的数据已发生改变,每一个item视图都应该刷新本身;notifyDataSetInvalidated(),提醒依附的监视器底层的数据不再是有效的或可获得的;
getItemViewType(int),获得在getView(int,View,ViewGroup)创建的指定item的视图类型,根据返回值,在getView()方法中初始化多种布局;getViewTypeCount(),返回在getView()方法初始化布局视图的数量
ListView滑动到底部时,感觉怎么滑都还有数据,每次滑动底部都会添加新的内容同时刷新ListView,感觉就像一个无穷无尽的新闻列表;当我们的数据没有新添加时,调用notifyDataSetInvalidate方法,在做新闻列表时,在多个Fragment来回切换时,新闻列表中的数据未发生改变,这时候如果还调用notifyDataSetChanged方法,会出现一片空白,解决的办法调用notifyDataSetInvalidate方法或者将mAdapter赋值为null
getViewTypeCount()方法设置items视图需要初始化布局的总数,getItemViewType(int)返回指定位置的item视图
其他BaseAdapter方法:areAllItemsEnabled(),标识在当前适配器中所有的items是否可用;getDropDownView(int,View,ViewGroup),获取指定位置显示下拉列表数据的item视图;hasStableIds(),标识是否item id是稳定的;isEmpty(),是否为空
isEnabled(),返回false,表示指定位置的item是独立,一个独立的item不允许选中和点击;registerDataSetObserver(DataSetObserver),当数据改变时,被适配器回调该注册的监视器;unregisterDataSetObserver(DataSetObserver),调用当方法解除已注册的监视器