当尝试滑动 Seekbar 时,ViewPager 更改了 Fragment。

3
我有一个包含三个fragment的ViewPager。中间(第二个)fragment中包含了一个SeekBar。当我尝试拖动SeekBar时,ViewPager会改变当前fragment。
曾经有一个用户遇到了类似的问题,并提供了一种解决方法,但那个方法完全取消了ViewPager的滑动功能。
我该如何保留原有的滑动功能,同时在使用SeekBar视图时将焦点集中于SeekBar?
1个回答

0
我终于找到了答案。如果还有人被这个问题困扰着。 创建一个自定义的SwipeRefreshLayout类并添加到布局中。
    public class CustomSwipeRefresh extends SwipeRefreshLayout {
    private int mTouchSlop;
    private float mPrevX;
    private boolean isDisabled;

    public CustomSwipeRefresh(Context context, AttributeSet attrs) {
        super(context, attrs);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    public void disableInterceptTouchEvent(boolean isDisabled) {
        this.isDisabled = isDisabled;
        getParent().requestDisallowInterceptTouchEvent(isDisabled);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPrevX = MotionEvent.obtain(event).getX();
                break;
            case MotionEvent.ACTION_MOVE:
                if (isDisabled) {
                    return false;
                }
                float eventX = event.getX();
                float xDiff = Math.abs(eventX - mPrevX);
                if (xDiff > mTouchSlop) {
                    return false;
                }
        }
        return super.onInterceptTouchEvent(event);
    }
}

然后在你的片段类中的seekbar上,只需添加以下代码
mswiperefresh.disableInterceptTouchEvent(boolean);

启用和禁用滑动聚焦。

 @Override
public void onStartTrackingTouch(SeekBar seekBar) {
     mswiperefresh.disableInterceptTouchEvent(true);
      }

 @Override
     public void onStopTrackingTouch(SeekBar seekBar) {
          mswiperefresh.disableInterceptTouchEvent(false);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接