滑动以刷新布局,不使用线性布局管理器

时间:2017-06-25 13:49:30

标签: android android-layout android-recyclerview material-design swiperefreshlayout

我有一个RecyclerView按预期工作,我尝试添加滑动以刷新布局,如下所示:

.submenu {
    visibility: hidden;
    opacity: 0;
    position: fixed;
    left: 0;
    width: 100%;
}
.submenu .nav {
   width: 100%;
   position: absolute;
}
.solutions-link:hover .submenu {
   opacity: 1;
   visibility: visible;
}

RecyclerView工作正常,但没有刷卡刷新,然后我评论了我将线性布局管理器设置为RecyclerView并刷卡以刷新实现工作并调用 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/srl_contacts" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/senderContainer" android:layout_below="@id/tv_connection_status"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_chat_list" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" android:padding="10dp" android:paddingBottom="3dp" android:paddingTop="3dp" android:scrollbars="none"></android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout> 接口的行

在java中:

OnRefresh()

可能是适配器的问题?我删除了我将适配器设置到RecyclerView的每一行,问题仍然存在,只有当我没有设置线性布局管理器时,刷卡才能刷新。

2 个答案:

答案 0 :(得分:1)

使用RecyclerView属性"layoutManager"在XML中设置布局管理器时使用的构造方法。

因为你没有在xml中使用它,我建议删除构造函数也删除 LinearLayoutManager ,因为它是必需的构造函数,并替换为 StaggeredGridLayoutManager 不传递构造函数,如:

StaggeredGridLayoutManager sglm =
                new StaggeredGridLayoutManager(columnCount, StaggeredGridLayoutManager.VERTICAL);
        mRvList.setLayoutManager(sglm);

OR 您可以在layououtManger XML中设置recycleView以用于您的案例布局管理器是线性的:

<android.support.v7.widget.RecyclerView
    android:id="@+id/rv_chat_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:padding="10dp"
    android:paddingBottom="3dp"
    android:paddingTop="3dp"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager"
    android:scrollbars="none"></android.support.v7.widget.RecyclerView>

现在你可以像你使用的那样传递构造函数:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);

答案 1 :(得分:1)

经过一些调试后发现问题是RecyclerView元素,列表的第一个元素被隐藏(Visibility.gone)所以每次列表到达顶部列表时,linearLayoutManger都试图获得第一个Visible元素没有呈现,因此从未调用滑动刷新动画。