abstract int |
getViewTypeCount()
Returns the number of types of Views that will be created by |
其实现的子类此方法返回值都是1.
abstract int |
getItemViewType(int position)
Get the type of View that will be created by
getView(int, View, ViewGroup) for the specified item.
|
其子类实现方法返回值都为0。
以上两种方法我估计是为了实现多种Item View用的。
下拉框Spinner的适配器是SpinnerAdapter,其继承自Adapter,要实现的方法较多,可用其子类ArrayAdapter<T>,BaseAdapter等,我一般用BaseAdapter实现。
源代码中BaseAdapter实现了继承自SpinnerAdaper的方法getDropDownView:
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getView(position, convertView, parent);
}
其返回的是getView的返回值。
根据我的测试发现,getView()方法返回值是用来显示下拉框普通状态时上面的view,getDropDownView返回值为当下拉框被点击时浮在屏幕上的ListView的item View。
CursorAdapter:继承自BaseAdapter
构造方法:CursorAdapter(Context context, Cursor c, int flags) 第三个参数为Cursor.FLAG_REGISTER_CONTENT_OBSERVER或者Cursor.FLAG_AUTO_REQUERY
CursorAdapter(Context context, Cursor c, boolean autoRequery) 第三个参数为true等于上面方法的第二个参数,false为另一个。
CursorAdapter(Context context, Cursor c) 相当于上面方法的第三个参数为true。
继承这个类需要重写两个方法:
View newView(Context context, Cursor cursor, ViewGroup parent)
这个方法主要用来给每个Item绑定一个View,返回值为绑定的View。
void bindView(View view, Context context, Cursor cursor)
这个方法主要是把存在Cursor里的要显示的数据给findViewById并显示要显示的数据。
下面是CursorAdapter的getView方法代码:
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException("this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException("couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, mCursor, parent);
} else {
v = convertView;
}
bindView(v, mContext, mCursor);
return v;
}
Cursor swapCursor(Cursor newCursor) 把当前界面显示的数据换成新的cursor带来的数据,返回值为原来的cursor。
void changeCursor(Cursor cursor) 等于调用上面的方法后在close原来的Cursor。