나는이 ViewPager
을 인스턴스화하는가 View
. 검색 결과가보기로 반환되는 동안 뷰 페이저와 자식 버튼의 스크롤을 일시적으로 비활성화하고 싶습니다. 전화를 걸 viewPager.setEnabled(false)
었지만 비활성화하지는 않습니다.
누구든지 아이디어가 있습니까?
답변
간단한 해결책은 플래그 ViewPager
가있는 자체 하위 클래스를 만드는 것 입니다. 그런 다음 and 메소드를 대체하십시오 . 경우 인보 진정한 동일 그렇지 않으면, 방법 .private boolean
isPagingEnabled
onTouchEvent
onInterceptTouchEvent
isPagingEnabled
super
return
public class CustomViewPager extends ViewPager {
private boolean isPagingEnabled = true;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.isPagingEnabled && super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return this.isPagingEnabled && super.onInterceptTouchEvent(event);
}
public void setPagingEnabled(boolean b) {
this.isPagingEnabled = b;
}
}
그런 다음 Layout.XML
파일 에서 <com.android.support.V4.ViewPager>
태그를 <com.yourpackage.CustomViewPager>
태그 로 바꿉니다.
이 코드는이 블로그 게시물 에서 수정되었습니다 .
답변
이것에 대한 쉬운 수정이 있습니다 :
viewpager 스크롤을 비활성화하려면 다음을 수행하십시오.
mViewPager.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
return true;
}
});
그리고 다시 활성화하려면 다음을 수행하십시오.
mViewPager.setOnTouchListener(null);
그 트릭을 할 것입니다.
답변
다음은 slayton의 대답에 대한 경량 변형입니다.
public class DeactivatableViewPager extends ViewPager {
public DeactivatableViewPager(Context context) {
super(context);
}
public DeactivatableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !isEnabled() || super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return isEnabled() && super.onInterceptTouchEvent(event);
}
}
내 코드를 사용하면와 페이징을 비활성화 할 수 있습니다 setEnable()
.
답변
간단한 해결책을 찾았습니다.
//disable swiping
mViewPager.beginFakeDrag();
//enable swiping
mViewPager.endFakeDrag();
답변
이 문제를 해결하는 다른 방법을 제안합니다. 아이디어는 viewPager를 scrollView로 래핑 하므로이 scrollView를 스크롤 할 수 없을 때 viewPager도 스크롤 할 수 없습니다.
내 XML 레이아웃은 다음과 같습니다.
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</HorizontalScrollView>
코드가 필요하지 않습니다.
나를 위해 잘 작동합니다.
답변
스 와이프를 비활성화하려면
mViewPager.beginFakeDrag();
스 와이프를 사용하려면
mViewPager.endFakeDrag();
답변
나를 위해 일한 가장 좋은 해결책은 다음과 같습니다.
public class DeactivatedViewPager extends ViewPager {
public DeactivatedViewPager (Context context) {
super(context);
}
public DeactivatedViewPager (Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean canScrollHorizontally(int direction) {
return false;
}
}
이 후 스크롤은 터치로 비활성화되며 여전히 setCurrentItem
방법을 사용 하여 페이지를 변경할 수 있습니다 .