V pickUpViewFromPool(T preferredData,T prepareData){
  V v=null;
  boolean isNewView=false;
  if (mPool.isEmpty()) {
    v=mViewCreator.createView(mContext);
    isNewView=true;
  }
 else {
    Iterator<V> iter=mPool.iterator();
    while (iter.hasNext()) {
      V vpv=iter.next();
      if (mViewCreator.hasPreferredData(vpv,preferredData)) {
        v=vpv;
        iter.remove();
        break;
      }
    }
    if (v == null) {
      v=mPool.pop();
    }
  }
  mViewCreator.prepareViewToLeavePool(v,prepareData,isNewView);
  return v;
}

V pickUpViewFromPool ( T preferredData , T prepareData ) { V v = null ; boolean isNewView = false ; if ( mPool . isEmpty ( ) ) { v = mViewCreator . createView ( mContext ) ; isNewView = true ; } else { Iterator < V > iter = mPool . iterator ( ) ; while ( iter . hasNext ( ) ) { V vpv = iter . next ( ) ; if ( mViewCreator . hasPreferredData ( vpv , preferredData ) ) { v = vpv ; iter . remove ( ) ; break ; } } if ( v == null ) { v = mPool . pop ( ) ; } } mViewCreator . prepareViewToLeavePool ( v , prepareData , isNewView ) ; return v ; }
gets a view from the pool and prepares it
