下面列出了android.view.View#onFinishTemporaryDetach ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void dispatchFinishTemporaryDetach(View view) {
if (!mTempDetachBound) {
bindTempDetach();
}
if (mDispatchFinishTemporaryDetach != null) {
try {
mDispatchFinishTemporaryDetach.invoke(view);
} catch (Exception e) {
Log.d(TAG, "Error calling dispatchFinishTemporaryDetach", e);
}
} else {
// Try this instead
view.onFinishTemporaryDetach();
}
}
public void dispatchFinishTemporaryDetach(View view) {
if (!this.mTempDetachBound) {
bindTempDetach();
}
if (this.mDispatchFinishTemporaryDetach != null) {
try {
this.mDispatchFinishTemporaryDetach.invoke(view, new Object[0]);
return;
} catch (Exception e) {
Log.d("ViewCompat", "Error calling dispatchFinishTemporaryDetach", e);
return;
}
}
view.onFinishTemporaryDetach();
}
private void dispatchFinishTemporaryDetach(View v) {
if( v == null )
return;
v.onFinishTemporaryDetach();
if( v instanceof ViewGroup){
ViewGroup group = (ViewGroup) v;
final int count = group.getChildCount();
for (int i = 0; i < count; i++) {
dispatchFinishTemporaryDetach(group.getChildAt(i));
}
}
}
private void dispatchFinishTemporaryDetach(View v) {
if( v == null )
return;
v.onFinishTemporaryDetach();
if( v instanceof ViewGroup){
ViewGroup group = (ViewGroup) v;
final int count = group.getChildCount();
for (int i = 0; i < count; i++) {
dispatchFinishTemporaryDetach(group.getChildAt(i));
}
}
}
private void dispatchFinishTemporaryDetach(View v) {
if( v == null )
return;
v.onFinishTemporaryDetach();
if( v instanceof ViewGroup){
ViewGroup group = (ViewGroup) v;
final int count = group.getChildCount();
for (int i = 0; i < count; i++) {
dispatchFinishTemporaryDetach(group.getChildAt(i));
}
}
}
/**
* Get a view and have it show the data associated with the specified
* position. This is called when we have already discovered that the view is
* not available for reuse in the recycle bin. The only choices left are
* converting an old view or making a new one.
*
* @param position The position to display
* @param isScrap Array of at least 1 boolean, the first entry will become true if
* the returned view was taken from the scrap heap, false if otherwise.
*
* @return A view displaying the data associated with the specified position
*/
View obtainView(int position, boolean[] isScrap) {
isScrap[0] = false;
View scrapView;
scrapView = mRecycler.getScrapView(position);
View child;
if (scrapView != null) {
if (ViewDebug.TRACE_RECYCLER) {
ViewDebug.trace(scrapView, ViewDebug.RecyclerTraceType.RECYCLE_FROM_SCRAP_HEAP,
position, -1);
}
child = mAdapter.getView(position, scrapView, this);
if (ViewDebug.TRACE_RECYCLER) {
ViewDebug.trace(child, ViewDebug.RecyclerTraceType.BIND_VIEW,
position, getChildCount());
}
if (child != scrapView) {
mRecycler.addScrapView(scrapView);
if (mCacheColorHint != 0) {
child.setDrawingCacheBackgroundColor(mCacheColorHint);
}
if (ViewDebug.TRACE_RECYCLER) {
ViewDebug.trace(scrapView, ViewDebug.RecyclerTraceType.MOVE_TO_SCRAP_HEAP,
position, -1);
}
} else {
isScrap[0] = true;
child.onFinishTemporaryDetach();
}
} else {
child = mAdapter.getView(position, null, this);
if (mCacheColorHint != 0) {
child.setDrawingCacheBackgroundColor(mCacheColorHint);
}
if (ViewDebug.TRACE_RECYCLER) {
ViewDebug.trace(child, ViewDebug.RecyclerTraceType.NEW_VIEW,
position, getChildCount());
}
}
return child;
}
/**
* Get a view and have it show the data associated with the specified position. This is called when we have already discovered
* that the view is not available for reuse in the recycle bin. The only choices left are converting an old view or making a new
* one.
*
* @param position
* The position to display
* @param isScrap
* Array of at least 1 boolean, the first entry will become true if the returned view was taken from the scrap heap,
* false if otherwise.
*
* @return A view displaying the data associated with the specified position
*/
@SuppressLint ( "NewApi" )
protected View obtainView( int position, boolean[] isScrap ) {
isScrap[0] = false;
View scrapView;
scrapView = mRecycler.getTransientStateView( position );
if ( scrapView != null ) {
return scrapView;
}
scrapView = mRecycler.getScrapView( position );
View child;
if ( scrapView != null ) {
child = mAdapter.getView( position, scrapView, this );
if ( android.os.Build.VERSION.SDK_INT >= 16 ) {
if ( child.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO ) {
child.setImportantForAccessibility( IMPORTANT_FOR_ACCESSIBILITY_YES );
}
}
if ( child != scrapView ) {
mRecycler.addScrapView( scrapView, position );
if ( mCacheColorHint != 0 ) {
child.setDrawingCacheBackgroundColor( mCacheColorHint );
}
} else {
isScrap[0] = true;
child.onFinishTemporaryDetach();
}
} else {
child = mAdapter.getView( position, null, this );
if ( android.os.Build.VERSION.SDK_INT >= 16 ) {
if ( child.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO ) {
child.setImportantForAccessibility( IMPORTANT_FOR_ACCESSIBILITY_YES );
}
}
if ( mCacheColorHint != 0 ) {
child.setDrawingCacheBackgroundColor( mCacheColorHint );
}
}
if ( mAdapterHasStableIds ) {
final ViewGroup.LayoutParams vlp = child.getLayoutParams();
LayoutParams lp;
if ( vlp == null ) {
lp = (LayoutParams) generateDefaultLayoutParams();
} else if ( !checkLayoutParams( vlp ) ) {
lp = (LayoutParams) generateLayoutParams( vlp );
} else {
lp = (LayoutParams) vlp;
}
lp.itemId = mAdapter.getItemId( position );
child.setLayoutParams( lp );
}
if ( mAccessibilityManager.isEnabled() ) {
if ( mAccessibilityDelegate == null ) {
mAccessibilityDelegate = new ListItemAccessibilityDelegate();
}
// TODO: implement this ( hidden by google )
// if (child.getAccessibilityDelegate() == null) {
// child.setAccessibilityDelegate(mAccessibilityDelegate);
// }
}
return child;
}