각 페이지마다 RecyclerView
을 사용하고 페이지 전체에 ViewItem
행을 공유하는 ViewPager
이 있습니다. 따라서 저는 그들 사이에 하나의 RecyclerViewPool
을 공유합니다. 그러나 ViewPager
은 각 페이지가 화면에 있는지 여부에 상관없이 각각 RecyclerView
을로드합니다. RecyclerView에 모든 항목이 화면에 나타나지 않고보기가 강제로 Recycler
으로 반환되도록 지시하는 방법이 있습니까?Android RecyclerView plus ViewPager
내 감각은 LinearLayoutManager
를 서브 클래 싱하고 onLayoutChildren
메서드를 재정의하는 길을 가야하는 것입니다,하지만 난 LayoutManager
에 많은 경험이없는 일부지도를하고 싶습니다. 그것은 잘 작동하고 요청이있는 경우 그보기를 제공
public class PageVisibleLinearLayoutManager extends LinearLayoutManager {
public PageVisibleLinearLayoutManager(Context context) {
super(context);
}
public PageVisibleLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public PageVisibleLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
private boolean pageVisible = true;
void setPageVisible(boolean pageVisible) {
boolean change = (this.pageVisible != pageVisible);
this.pageVisible = pageVisible;
if(change) requestLayout();
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
if(pageVisible) {
super.onLayoutChildren(recycler, state);
} else {
removeAndRecycleAllViews(recycler);
}
}
}
:
ViewPager는 인접 페이지가 표시되기 전에 인접 페이지를 사용자가 스 와이프 할 때 표시해야하기 때문에 인접 페이지를 표시합니다. 따라서 시각은 실제로는 오프 스크린입니다. 현재 페이지에 인접하지 않은 페이지는 작성되지 않고 파기됩니다. – dsh
어떤 이유에서든'setOffscreenPageLimit'을 설정 한 것과 관계없이 ViewPager는 항상 6 페이지를로드합니다. 필자의 이전 솔루션은'RecyclerView'를'ViewStub's에 넣고 중앙 페이지가 스크롤 될 때 인접 페이지를 팽창시키는 것이 었습니다. 사실 꽤 잘 작동하지만, 아마도 이것보다 조금 더 빠르다. – NewEndian
흥미 롭습니다. 내가 작업하고있는 앱에는 3 개의 탭이있는 ViewPager가 하나 있습니다. setOffscreenPageLimit 메서드를 알지 못했지만 현재 탭과 인접 탭이 존재하고 다른 탭이 변경된 것을 관찰했습니다. (필자는 최근에 커스텀 뷰에서 커스텀 뷰의 print 문을 사용하여 라이프 사이클을 감시/디버깅했는데, 이는 창에서 분리 된 시점을 알 수있는 방식으로, 조각 작업의 일부로 디버그 지문을 사용했습니다.) – dsh