Android开发

PreferenceGroupAdapter为什么不会重用ite

2019-04-19  本文已影响0人  天蓝_d82b

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;

}

上一篇 下一篇

猜你喜欢

热点阅读