android - disable - swiperefreshlayout recyclerview



SwipeRefreshLayout-スワイプしてリフレッシュしますが、ビューのプルダウンは移動しません (4)

出来ますか ?? タイトルとして

下にスワイプしてレイアウトをリフレッシュしますが、スワイプのガストレ

ありがとうございます - 私はSwipeRefreshLayoutを使用しています


Answer #1

あなたはこのようにしてください

listView.setOnScrollListener(new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    boolean enable = false;
    if(listView != null && listView.getChildCount() > 0){
        // check if the first item of the list is visible
        boolean firstItemVisible = listView.getFirstVisiblePosition() == 0;
        // check if the top of the first item is visible
        boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0;
        // enabling or disabling the refresh layout
        enable = firstItemVisible && topOfFirstItemVisible;
    }
    swipeRefreshLayout.setEnabled(enable);
}});

listViewにpaddingTopがある場合、このコードは機能しません


Answer #2

回避策のためのJongz Puangputのおかげで、 もう少し簡単な解決策を提案したいと思います。

SwipeRefreshLayoutの子をプルダウンするのを防ぐために、次のようにオーバーライドされたoffsetTopAndBottomメソッドを使って独自の子ビューを提供することができます:

public class FixedRelativeLayout extends RelativeLayout {

    ...

    @Override
    public void offsetTopAndBottom(int offset) {
        // Ignoring movement from SwipeRefreshLayout
        super.offsetTopAndBottom(0);
    }

}

それは私のために働く、誰でも助けることを願っています。


Answer #3

私の試行錯誤の後、私は

http://www.dailydevbook.de/android-swiperefreshlayout-without-overscroll/

SwipeRefreshLayoutを実装できる人のために、それを達成するために

ステップ1:githubからandroid-support v4(オープンソース)をダウンロード

ステップ2:プロジェクトにjavaクラスをコピーするsrc

  • SwipeRefreshLayout
  • SwipeProgressBar
  • BakedBezierInterpolator

note1-(Refactor SwipeRefreshLayoutからmySwipeRefreshLayoutに変更して元のものと混同しないようにする)note2-(これらのクラスを修正し、v4の代わりにソースを使用する)

ステップ3: コード更新の使用

  • 代わりに mySwipeRefreshLayout
  • SwipeRefreshLayout

ステップ4: レイアウトの使用を更新する

  • com.yourpackage.mySwipeRefreshLaoutの代わりに
  • android.support.v4.widget.SwipeRefreshLayout

ステップ5:mySwipeRefreshLayout.javaで、次のコードを見つけて変更します

private  void  updateContentOffsetTop ( int  targetTop) {
        final  int  currentTop = mTarget.getTop ();
        if  (targetTop> mDistanceToTriggerSync) {
            targetTop = ( int ) mDistanceToTriggerSync;
        } else  if  (targetTop < 0 ) {
            targetTop = 0 ;
        }
        // SetTargetOffsetTopAndBottom (targetTop - currentTop);
        setTargetOffsetTopAndBottom ( 0 ); // MOD: Prevent Scroll Down Animation
    }

Answer #4

私も同じ問題に直面していました。 これを試して:

guidesList.setOnScrollListener(new AbsListView.OnScrollListener() {  
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int   visibleItemCount, int totalItemCount) {

        int topRowVerticalPosition = (guidesList == null || 
            guidesList.getChildCount() == 0) ? 0 : guidesList.getChildAt(0).getTop();

        swipeContainer.setEnabled(firstVisibleItem == 0 && topRowVerticalPosition >= 0);
    }
});




swiperefreshlayout