出来ますか ??タイトル通り
レイアウトを更新するには下にスワイプしますレイアウトを固定して、スワイプ操作に沿って下に移動しないでください
ありがとう-私はSwipeRefreshLayoutを使用しています
試行錯誤の末、私は
http://www.dailydevbook.de/Android-swiperefreshlayout-without-overscroll/
それを達成するために、SwipeRefreshLayoutを実装できる人向け
ステップ1:[〜#〜]ダウンロード[〜#〜]Androidサポートv4(オープンソース)githubから
ステップ2:[〜#〜] copy [〜#〜]以下のJavaプロジェクトのクラスへのクラス
note1-(オリジナルとの混同を防ぐためにSwipeRefreshLayoutをmySwipeRefreshLayoutにリファクタリングする)note2-(これらのクラスを修正し、v4の代わりに互いにソースを使用する)
ステップ3:UPDATE CODE使用
ステップ4:UPDATE LAYOUT使用
ステップ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
}
あなたはこの方法を試します
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がある場合は機能しません
回避策についてJongz Puangputに感謝しますが、別の解決策を提案したいと思います。
SwipeRefreshLayoutの子のプルダウンを防ぐために、次のようにoffsetTopAndBottom
メソッドをオーバーライドした独自の子ビューを提供できます。
public class FixedRelativeLayout extends RelativeLayout {
...
@Override
public void offsetTopAndBottom(int offset) {
// Ignoring movement from SwipeRefreshLayout
super.offsetTopAndBottom(0);
}
}
それは私にとってはうまくいきます、それが誰かを助けることを願っています。
私も同じ問題に直面していました。これを試して:
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を無効または有効にできることを理解することで、例を挙げましょう。
線形レイアウトマネージャーまたはグリッドを使用するとし、そこからリサイクル業者の位置を見つけることができます
LinearLayoutManager mLayoutManager;
if (mColumnCount <= 1) {
mLayoutManager = new LinearLayoutManager(getBaseContext());
} else {
mLayoutManager = new GridLayoutManager(getBaseContext(), mColumnCount);
}
recyclerAdapter = new RecyclerViewAdapter(allData);
mRecycler.setAdapter(recyclerAdapter);
mRecycler.setLayoutManager(layoutManager);
if (mLayoutManager.findFirstCompletelyVisibleItemPosition() == 0) {
swipeRefreshLayout.setEnabled(true);
}
else{
swipeRefreshLayout.setEnabled(false);
}
したがって、リサイクラースクロールは正常に機能し、上部に到達した場合、swipeRefreshLayoutが更新イベントを処理します...