2016-10-23 13 views
0

最近のアンドロイドサポートライブラリのアップデートでは、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(); 
     } 
    } 
} 

関連する問題