带有空TextView的Android SwipeRefreshLayout无法正常工作

我想要做的是,允许用户轻扫和刷新列表,数据是否存在并不重要。 但是,当数据在列表视图中只有列表视图应该是可见的,而当数据不存在时,空的textview应该是可见的。 在这两种情况下,用户必须能够通过刷卡来刷新列表。

我在这个讨论中尝试了一些解决scheme,但是没有一个听起来像是在工作,把两个SwipeToRefresh工作得很好,但是在从服务器获取数据时显示空容器。

我试图用我自己的逻辑包装ListView和Textview在一个Relative / FrameLayout里面,但是SwipeToRefresh只接受一个视图的行为

这是我试过的一个XML片段

<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/activity_main_swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.945" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/event_list_eventlist" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@color/event_background" android:dividerHeight="1dp" > </ListView> <TextView android:id="@+id/event_txt_nothing_found" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerInParent="true" android:layout_centerVertical="true" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@android:color/darker_gray" android:visibility="gone" /> </RelativeLayout> </android.support.v4.widget.SwipeRefreshLayout> 

请帮忙

Related of "带有空TextView的Android SwipeRefreshLayout无法正常工作"

我使用FrameLayout解决了同样的问题,请看下面的代码:

 <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/layout_swipe_refresh" android:layout_width="match_parent" android:layout_height="wrap_content"> <ListView android:id="@+id/lv_products" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@null" /> </android.support.v4.widget.SwipeRefreshLayout> <TextView android:id="@+id/tv_no_product" style="@android:style/TextAppearance.Medium" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:gravity="center" android:text="@string/msg_no_listing" android:textColor="@color/primary_green" android:visibility="gone" /> </FrameLayout> 

您也可以使用RelativeLayout,但关键是将您的ListView放在SwipeRefreshLayout和TextView外面。

我也有这个问题,并通过使用下面的布局解决了它没有任何额外的代码在活动中。

如果您使用的是ListActivityListFragment它会处理显示/隐藏空白视图,并使用此布局结构刷新空白列表。

没有hacks需要,一切都在SwipeRefreshLayout ,因为它应该是。

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Refresher" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" /> <ScrollView android:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Geen formulieren gevonden" style="@style/text.EmptyView" /> </ScrollView> </LinearLayout> </android.support.v4.widget.SwipeRefreshLayout> 

希望它能帮助任何人解决这个问题。

最后用下面的代码解决问题

 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_container" android:layout_below="@+id/search_product" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_shop_list" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ScrollView android:gravity="center" android:fillViewport="true" android:layout_width="match_parent" android:layout_height="match_parent"> <com.forysta.inloyal.view.textviews.RegularTextView android:id="@+id/tv_no_shop_data" style="@style/text_Size_16" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@string/alert_nodatashop" android:visibility="visible" app:layout_collapseMode="parallax" /> </ScrollView> </LinearLayout> </android.support.v4.widget.SwipeRefreshLayout> 

我的问题似乎没有logging,但如果回收站视图的适配器没有数据,并且您已经调用了setLayoutManager函数,则回收站视图将变为不可刷新的。 我的解决scheme是在收到一些数据后才调用setLayoutManager