如何在横向模式下禁用SwipeRefreshLayout

时间:2016-05-06 05:57:40

标签: android android-recyclerview swiperefreshlayout

我希望在屏幕旋转时禁用SwipeRefreshLayout模式中的landscapeSwipeRefreshLayout必须自动停用。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        refresh.setEnabled(false);
        refresh.setRefreshing(false);

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        refresh.setEnabled(true);
    }
}

refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        videoData("video");
        refresh.setRefreshing(true);
        (new Handler()).postDelayed(new Runnable() {
            @Override
            public void run() {
                refresh.setRefreshing(false);
            }
        }, 5000);
    }
});

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listCoordinate"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b2100f0f">

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/refresh"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">

            <utils.VideoRecyclerview
                android:id="@+id/videoRecyclerview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:footerDividersEnabled="false"
                android:gravity="center_vertical" />

        </android.support.v4.widget.SwipeRefreshLayout>

    </FrameLayout>

</android.support.design.widget.CoordinatorLayout>

3 个答案:

答案 0 :(得分:0)

那是我的主要内容,我并不是说这是最好的方法,但它可能有用......

在您SwipeRefreshLayout处执行此操作的内容中,您可以询问设备是否位于Landscape中,您可以这样做:

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Landscape mode
}

即使

if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

所以我猜如果方向是横向的,你可以返回false。

修改

然后尝试这样:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  if(newConfig == Configuration.ORIENTATION_LANDSCAPE){
     yourSwipeLayoutRefresh.setEnabled(false);
     yourSwipeLayoutRefresh.setRefreshing(false);
  }
}

注意:如果您的SwipeLayoutRefresh不在同一个班级,您可以将其设为静态,然后您可以访问它,但始终询问它是否为空

答案 1 :(得分:0)

要禁用'SwiperefreshLayout',您必须在横向模式中禁用它:

禁用

swipeRefreshLayout.setEnabled(false);

启用:

swipeRefreshLayout.setEnabled(true);

现在要查找设备的方向,您可以使用以下条件:

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
    //Do some stuff
}

您可能需要在orientationn更改时检测事件,因为您可以覆盖此方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
    //Do stuff here
}

如果它已经刷新,那么当你改变方向时它会保持刷新,所以你必须像这样检查:把这个代码放在你重写的方法中。

if (swipeRefreshLayout.isRefreshing()) {
    swipeRefreshLayout.setRefreshing(false);
}

答案 2 :(得分:0)

试试这个:

    public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    int orientation = newConfig.orientation;
     if (orientation == Configuration.ORIENTATION_LANDSCAPE)
        refreshLayout.setEnabled(false)


   }