Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在TableLayout中,如何修改SwiperFreshLayout的滑动行为_Android_Android Support Library - Fatal编程技术网

Android 在TableLayout中,如何修改SwiperFreshLayout的滑动行为

Android 在TableLayout中,如何修改SwiperFreshLayout的滑动行为,android,android-support-library,Android,Android Support Library,我在SwiperFreshLayout中使用了android.support.design.widget.TabLayout,我注意到如果我的水平滑动有任何轻微的向下变化,SwiperFreshLayout将在水平寻呼机滑动之前处理。由于这个原因,目前很难滑动浏览页面 我想修改SwipperFresh,使其仅在滑动更垂直时响应,以便水平滑动更容易。或者有更好的方法来解决这个问题 这是我的示例应用程序的activity_main.xml <android.support.v4.widget.

我在SwiperFreshLayout中使用了android.support.design.widget.TabLayout,我注意到如果我的水平滑动有任何轻微的向下变化,SwiperFreshLayout将在水平寻呼机滑动之前处理。由于这个原因,目前很难滑动浏览页面

我想修改SwipperFresh,使其仅在滑动更垂直时响应,以便水平滑动更容易。或者有更好的方法来解决这个问题

这是我的示例应用程序的activity_main.xml

<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/tabLayout"/>

</RelativeLayout>

我用滚动解决了我的问题,但还有其他一些小问题需要考虑。通过在正确的时间禁用SwiperFreshLayout,可以很容易地使ViewPager和SwipreRefreshLayout更好地工作

基本上,如果您收听ViewPager的OnScrollChange事件,您就知道用户何时启动ViewPager滚动,并且在滚动完成时将获得滚动状态空闲。当状态不是空闲时,我可以在SwiperFreshLayout上使用setEnable(false)禁用刷新。这阻止了刷新接管

如果ViewPagers页面的内容不滚动,这将正常工作。但如果他们这样做了,你就会遇到另一个问题。向下滚动视图以到达顶部将被SwipeRefreshLayout覆盖,您只能向下滚动

我解决这个新问题的方法是禁用SwipeRefreshLayout,除非ScrollView位于顶部。根据可滚动视图的不同,确定顶部会有所不同,因此我不包含任何代码

SwipeRefreshLayout的放置也会影响此操作的正确性。如果您在ViewPager中的视图之外有它,并且一个页面的滚动视图是“在顶部”,并且您滑动到另一个页面,则必须检查新视图是否也在顶部。我在同一个ViewPager.OnPageChaneListener.onPageScrollStateChaned中这样做了

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    mViewPager = (ViewPager) findViewById(R.id.viewPager);
    mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float v, int i1) {
        }

        @Override
        public void onPageSelected(int position) {
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            if (mSwipeRefreshLayout != null) {
                mSwipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
            }
        }
    };
    mViewPager.addOnPageChangeListener(mOnPageChangeListener);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mTabLayout.setupWithViewPager(mViewPager);
    mSwipeRefreshLayout.setOnRefreshListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mViewPager != null) {
        mViewPager.removeOnPageChangeListener(mOnPageChangeListener);
    }
}

我还没有发现任何其他应用程序在SwipreRefreshLayout中使用TabLayout,所以可能是“不要那样做”的情况。但是在玩Play Store应用程序时,你只能看到滚动视图的滚动指示器与水平滑动指示器的对比,当滑动大约为45%时。我很想复制这种行为。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    mViewPager = (ViewPager) findViewById(R.id.viewPager);
    mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float v, int i1) {
        }

        @Override
        public void onPageSelected(int position) {
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            if (mSwipeRefreshLayout != null) {
                mSwipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
            }
        }
    };
    mViewPager.addOnPageChangeListener(mOnPageChangeListener);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mTabLayout.setupWithViewPager(mViewPager);
    mSwipeRefreshLayout.setOnRefreshListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mViewPager != null) {
        mViewPager.removeOnPageChangeListener(mOnPageChangeListener);
    }
}