我有一个包含不同片段的普通NavigationDrawer:
问题:
NewsFragment包含SwipeRefreshLayout。它第一次刷新时效果很好。
我可以将片段更改为其他东西1和2以及设置。所以我回到NewsFragment。
现在当我刷新时,片段会冻结。
drawerLayout正常工作(打开/关闭,甚至ActionBar标题更改),但主片段保留在NewsFragment,我无法滚动。但scollListner工作(我有日志),但视图没有改变。
没有refreshView(swipeRefreshLayout的顶部),没有滚动,没有响应按钮(在焦点上,onclick)但只是在视觉上。
实际上,它就像一个响应片段在冷冻片段后面。
此外,我在ADBLog中遇到此错误:
SwipeRefreshLayout﹕ Got ACTION_MOVE event but don't have an active pointer id.
任何想法??
如果你问,我可以发布代码。
答案 0 :(得分:11)
好的,我找到了解决方案。我发布它是因为它可能发生在每个人身上,这有点无聊(为我找两天)。
首先我在我的XML中有这个,其中包含SwipeRefreshLayout(一个片段):
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/news_container_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:background="@color/news_background">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/news_list_recycle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:dividerHeight="5dp" />
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/news_progress"
android:visibility="invisible"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
所以,为了修复这个错误,你需要在你的SWIPEREFRESHLAYOUT中拥有回收(或列表视图):
所以,我移动我的progressBar并将RelativeLayout设为rootView。
结果:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/news_progress"
android:visibility="invisible"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/news_container_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:background="@color/news_background">
<android.support.v7.widget.RecyclerView
android:id="@+id/news_list_recycle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:dividerHeight="5dp" />
</android.support.v4.widget.SwipeRefreshLayout>
我希望以后可以帮助别人。
答案 1 :(得分:0)
This answer为我工作。这是关于清除onPause()中的刷新布局。
答案 2 :(得分:-1)
您的代码示例确实解决了这个问题。这似乎是v21支持库的一个问题。
为了帮助其他可能遇到此问题的其他人,我们的问题似乎是SwipeRefreshLayout
不再乐意成为根视图。
添加RelativeLayout
以包裹SwipeRefreshLayout
修复了您的案例中的错误,而不仅仅是ListView/RecyclerView
内的SwipeRefreshLayout
。我没有尝试,但我猜测LinearLayout
或其他也会解决问题。
所以修复是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- List, Layout etc -->
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>