PreferenceGroupAdapter中item不会被重用的原因:
1、首先getViewTypeCount返回值即为item的个数(之所以后面+1是因为后期又加入了一个HighlightItemViewType),导致item的种类和item数量相同,导致不会重用item
2、然后getItemViewType的返回值有两种:
第一种:IGNORE_ITEM_VIEW_TYPE,官方给的解释是:如果类型为IGNORE_ITEM_VIEW_TYPE,则该view不会被重用
第二种:Collections.binarySearch(mPreferenceLayouts, mTempPreferenceLayout)的值(且只有大于=0的值,小于0时会返回上上面 的IGNORE_ITEM_VIEW_TYPE),而binarySearch的值为mTempPreferenceLayout在mPreferenceLayouts中的index,所以不会出现相同的值,即导致该view不会被重用。
@Override
public int getItemViewType(int position) {
if (position ==mHighlightedPosition) {
return getHighlightItemViewType();
}
if (!mHasReturnedViewTypeCount) {
mHasReturnedViewTypeCount =true;
}
final Preference preference =this.getItem(position);
if (!preference.isRecycleEnabled()) {
return IGNORE_ITEM_VIEW_TYPE;
}
mTempPreferenceLayout = createPreferenceLayout(preference, mTempPreferenceLayout);
int viewType = Collections.binarySearch(mPreferenceLayouts, mTempPreferenceLayout);
if (viewType <0) {
// This is a class that was seen after we returned the count, so
// don't recycle it.
return IGNORE_ITEM_VIEW_TYPE;
}else {
return viewType;
}
}
@Override
public int getViewTypeCount() {
if (!mHasReturnedViewTypeCount) {
mHasReturnedViewTypeCount =true;
}
return Math.max(1, mPreferenceLayouts.size()) +1;
}