Android之Adapter系列之BaseAdapter类
来源:互联网 发布:软件定制价格 编辑:程序博客网 时间:2024/05/21 12:36
BaseAdapter源码定义
BaseAdapter是一个同时实现了ListAdapter和SpinnerAdapter的公共基类,同时BaseAdapter是一个抽象类。源码路径:framework\base\core\java\android\widget\BaseAdapter.java
package android.widget;import android.database.DataSetObservable;import android.database.DataSetObserver;import android.view.View;import android.view.ViewGroup;/** * BaseAdapter是一个同时实现了ListAdapter和SpinnerAdapter的常用公共基类, * 因此BaseAdapter可以在ListView和Spinner控件中使用 */public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter { //DataSetObservable用来监测数据库中数据变化 private final DataSetObservable mDataSetObservable = new DataSetObservable(); public boolean hasStableIds() { return false; } /** * 注册DataSetObservable,当数据发生变化后通知View更新数据 */ public void registerDataSetObserver(DataSetObserver observer) { mDataSetObservable.registerObserver(observer); } /** * 解除注册DataSetObservable */ public void unregisterDataSetObserver(DataSetObserver observer) { mDataSetObservable.unregisterObserver(observer); } /** * 通知那些注册了DataSetObservable的observers,对应数据已经改变 * 那些加载了该类数据的View需要更新 */ public void notifyDataSetChanged() { mDataSetObservable.notifyChanged(); } /** * 通知那些注册了DataSetObservable的observers,对应数据已经失效或者不可用 * 如果对应的数据再发生改变,那么不再上报数据改变通知 */ public void notifyDataSetInvalidated() { mDataSetObservable.notifyInvalidated(); }/** * 默认返回 true */ public boolean areAllItemsEnabled() { return true; }/** * 默认返回 true */ public boolean isEnabled(int position) { return true; }/** * 调用getView(position, convertView, parent); */ public View getDropDownView(int position, View convertView, ViewGroup parent) { return getView(position, convertView, parent); }/** * 默认返回 0 */ public int getItemViewType(int position) { return 0; }/** * 默认返回 1 */ public int getViewTypeCount() { return 1; }/** * 默认返回getCount() == 0,注意这里调用的是getCount来返回adapter中的items */ public boolean isEmpty() { return getCount() == 0; }}BaseAdapter是Android应用程序中经常用到的基础数据适配器的基类,它实现了Adapter接口。其主要用途是将一组数据传到
像ListView、Spinner、Gallery及GridView等UI显示组件进行显示。但是BaseAdapter是一个基类,没有实现绑定数据的功能。这
使得开发者可以更具自己的需求,自定义实现,只是实现起来稍微复杂一些。
BaseAdapter继承事例
自定义adtapter,继承BaseAdapter
class BaseAdapterDemo extends BaseAdapter {private LayoutInflater mInflater = null;public BaseAdapterDemo(Context context) {mInflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return mData.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder mViewHolder = null; //convertView也是用来优化view加载的一种方式if (convertView == null) {mViewHolder = new ViewHolder();convertView = mInflater.inflate(R.layout.list_item, null);mViewHolder.mImageView = (ImageView) convertView.findViewById(R.id.image);mViewHolder.mTitle = (TextView) convertView.findViewById(R.id.title);mViewHolder.mSummary = (TextView) convertView.findViewById(R.id.summary);convertView.setTag(mViewHolder);} else {mViewHolder = (ViewHolder) convertView.getTag();}mViewHolder.mImageView.setBackgroundResource((Integer) mData.get(position).get(KEY_IMG));mViewHolder.mTitle.setText((String) mData.get(position).get(KEY_TITLE));mViewHolder.mSummary.setText((String) mData.get(position).get(KEY_SUMMARY));return convertView;}}定义MainActivity
public class MainActivity extends Activity { private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.list); mData = setData(); mListView.setAdapter(new BaseAdapterDemo(this)); } }布局文件list_item.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="50dp" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="5dp" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5dp" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAllCaps="true" android:textSize="25sp" android:textStyle="bold" /> <TextView android:id="@+id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="italic" /> </LinearLayout> </LinearLayout>布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fastScrollEnabled="true" /></LinearLayout>效果图:
事例总结
本事例仅对BaseAdapter做了简单继承,说明了BaseAdapter的基本使用,详细自定义,大家可以自由发挥,充分发挥BaseAdapter的特点。
源码下载
0 0
- Android之Adapter系列之BaseAdapter类
- Android中Adapter之BaseAdapter使用
- Android中Adapter之BaseAdapter使用
- Android中Adapter之BaseAdapter使用
- Android中Adapter之BaseAdapter使用
- Android中Adapter之BaseAdapter使用
- Android中Adapter之BaseAdapter使用
- Android之Adapter系列之SimpleAdapter类
- Android之Adapter系列之Adapter接口
- Android UI高级控件之自定义Adapter(继承BaseAdapter)
- Android Adapter接口及实现类之ArrayAdapter、SimpleAdapter和BaseAdapter的简单介绍及运用
- Android基础类之BaseAdapter
- Android基础类之BaseAdapter
- Android基础类之BaseAdapter
- Android基础类之BaseAdapter
- Android基础类之BaseAdapter
- Android基础类之BaseAdapter
- Android基础类之BaseAdapter
- ZooKeeper学习第一期---Zookeeper简单介绍
- web项目如何知道给别人发送的邮箱,判断用户是否读了邮件
- 总结2016-8-4
- Android时间轴效果的实现
- lvm
- Android之Adapter系列之BaseAdapter类
- jquery animate 数字动态变化达不到指定的值
- AFN同步异步请求
- shell中for循环总结
- 杂乱笔记
- 掌握VS2010调试 -- 入门指南
- JVM类加载机制入门总结
- 在指定路径创建文件夹,读取图片文件,缩放图片,判断文件夹是否存在,
- 5、文件的压缩与打包