ViewPager + Seekbar: при попытке сдвинуть панель поиска, ViewPager изменяет фрагмент вместо - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть ViewPager с тремя фрагментами.средний (второй) фрагмент имеет встроенную панель поиска.Когда я пытаюсь сдвинуть панель поиска, viewPager изменяет фрагмент.

Был еще один пост, в котором у пользователя была похожая проблема и предлагалось решение, но это решение полностью отключает функцию свайпа отViewPager.

Как сохранить обе функции прокрутки, но сфокусировать панель поиска, когда используется панель поиска.

1 Ответ

0 голосов
/ 02 мая 2019

Я наконец понял ответ.Если кто-то все еще застрял с вопросом.Создайте пользовательский класс 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);
    }
}

Затем в свой класс фрагмента с помощью панели поиска просто добавьте код

mswiperefresh.disableInterceptTouchEvent(boolean);

, чтобы включить или отключить фокус смахивания.

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

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