2016-10-23 2 views
0

최근 Android 업데이트 라이브러리에서 SwipeRefreshLayout을 사용 중지해도 레이아웃이 재설정되지만 이전에는 사용하지 않았습니다.SwipeRefreshLayout을 사용 중지하면 레이아웃이 재설정됩니다.

void reset() { 
    mCircleView.clearAnimation(); 
    mProgress.stop(); 
    mCircleView.setVisibility(View.GONE); 
    setColorViewAlpha(MAX_ALPHA); 
    // Return the circle to its start position 
    if (mScale) { 
     setAnimationProgress(0 /* animation complete and view is hidden */); 
    } else { 
     setTargetOffsetTopAndBottom(mOriginalOffsetTop - mCurrentTargetOffsetTop, 
       true /* requires update */); 
    } 
    mCurrentTargetOffsetTop = mCircleView.getTop(); 
} 

@Override 
public void setEnabled(boolean enabled) { 
    super.setEnabled(enabled); 
    if (!enabled) { 
     reset(); 
    } 
} 

나는 reset은 내가 레이아웃을 사용하지 않는 경우 호출되고 싶지 않아,하지만 난 그것을하는 간단한 방법을 찾을 수 없습니다. 나는 SwipeRefreshLayout 클래스를 확장하고 setEnabled을 무시한다고 생각했지만 조부모 클래스 'setEnabled에 액세스 할 수 없습니다. 이 문제를 해결할 방법이 있습니까?

답변

1

당신이 android.support.v4.widget에 클래스를 배치하는 경우는 다음과 같이 수행 할 수 있습니다


package android.support.v4.widget; 

import android.content.Context; 
import android.util.AttributeSet; 

/** 
* 
*/ 

public class MySwipeRefreshLayout extends SwipeRefreshLayout { 
    private boolean settingEnabled = false; 

    public MySwipeRefreshLayout(Context context) { 
     super(context); 
    } 

    public MySwipeRefreshLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public void setEnabled(boolean enabled) { 
     try { 
      settingEnabled = true; 
      super.setEnabled(enabled); 
     } finally { 
      settingEnabled = false; 
     } 
    } 

    @Override 
    void reset() { 
     if (!settingEnabled) { 
      super.reset(); 
     } 
    } 
}