SwipeRefreshLayout Got Action_Move замораживает вид

У меня есть обычный NavigationDrawer с разными фрагментами:

  • Новости
  • прочее 1
  • другие вещи 2
  • Параметр

Проблема:

NewsFragment содержит SwipeRefreshLayout. Он отлично работает с первого раза, когда я обновляюсь.

Я могу изменить фрагмент на другие вещи 1 и 2 и настройки. Итак, я возвращаюсь к NewsFragment.

И теперь, когда я обновляюсь, фрагмент зависает.

DrawerLayout работает правильно (открытие/закрытие, даже изменение заголовка ActionBar), но основной фрагмент остается в NewsFragment, и я не могу прокручивать. Но scollListner работает (у меня есть журнал), но вид не меняется.

Нет refreshView (верхняя часть swipeRefreshLayout), нет прокрутки, нет кнопки ответа (в фокусе, при клике), а только визуально.

Фактически, за замороженным фрагментом находится Отвечающий фрагмент.

Также у меня есть эта ошибка в ADBLog:

SwipeRefreshLayout﹕ Got ACTION_MOVE event but don't have an active pointer id.

Есть идеи ??

Я могу опубликовать код, если вы спросите.


person Cocorico    schedule 17.11.2014    source источник


Ответы (3)


Хорошо, я нашел решение. Я публикую это, потому что это может случиться с каждым, и это немного скучно (два дня, чтобы найти меня).

Сначала у меня было это в моем 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>

So, to fix the bug, YOU NEED TO JUST HAVE THE RECYCLEVIEW (or listview) IN YOUR 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>

I hope it will help someone else later.

person Cocorico    schedule 18.11.2014
comment
У меня есть Activity с NavigationDrawer, который загружает Fragment, содержащий только это: ListView внутри SwipeRefreshLayout, и у меня тоже есть эта ошибка... - person shkschneider; 13.01.2015
comment
Нет, но я ищу то, что отличается, потому что это работает для вас, поэтому я думаю, что моя ошибка где-то рядом. - person shkschneider; 13.01.2015
comment
Можете ли вы опубликовать свой xml? твой Фрагмент замерзает, как я? - person Cocorico; 15.01.2015
comment
Я заставил его работать. Мне не нужно публиковать свой макет, моя проблема на самом деле отличалась от этой. Спасибо, в любом случае. - person shkschneider; 15.01.2015
comment
Это сработало для меня. Убедитесь, что ваша высота RecyclerViews также установлена ​​​​на wrap_content и НЕ является корневым представлением в вашем макете. - person Kasper Finne Nielsen; 28.04.2015

Этот ответ сработал для меня. Речь идет об очистке макета обновления в onPause().

person Bolling    schedule 25.03.2015

Ваш пример кода действительно решает проблему. Похоже, это проблема с библиотекой поддержки 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>
person biddulph.r    schedule 26.11.2014
comment
Мне это не помогло, я изменил свою настройку с этой: Fragment -> SwipeRefresh -> Recycler на этот Fragment -> FrameLayout -> SwipeRefresh -> Recycler, но я все еще получаю эту ошибку. - person A. Steenbergen; 12.02.2015