2016-10-23 2 views
0

In einem kürzlich erschienenen Update der Android-Support-Bibliothek Deaktivierung die SwipeRefreshLayout setzt auch das Layout, während es nicht vor verwendet hat.Deaktivieren SwipeRefreshLayout setzt das Layout

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(); 
    } 
} 

Ich will nicht reset genannt zu werden, wenn ich das Layout zu deaktivieren, aber ich kann nicht eine einfache Möglichkeit, es zu tun finden. Ich dachte, die SwipeRefreshLayout Klasse zu erweitern und überwiegende setEnabled aber ich kann nicht die Großeltern Klasse zugreifen setEnabled auf diese Weise. Gibt es einen Weg dahin?

Antwort

1

Wenn Sie Ihre Klasse android.support.v4.widget platzieren, können Sie etwas tun:


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(); 
     } 
    } 
} 

Verwandte Themen