2015-10-09 4 views
4

Все работает отлично на моем Nexus 5 с API 21 и выше, но на более раннем устройстве Samsung с API 4.2.2 я получаю следующую ошибку с SwipeRefreshLayout.SwipeRefreshLayout Freezes on API 4.2.2

Кто-нибудь испытывает что-либо подобное?

enter image description here

Когда я тяну вниз, чтобы обновить Обновлять замерзает, пока я не начать прокрутку назад вверх.

Это очень не в моей голове, но будет ли это иметь какое-то отношение к чему-то запутанному в новых обновлениях библиотеки поддержки? Я в настоящее время используют следующие библиотеки поддержки:

compile 'com.android.support:appcompat-v7:22.2.1' 
compile 'com.android.support:support-v4:22.2.1' 
compile 'com.android.support:cardview-v7:22.2.1' 
compile 'com.android.support:design:23.0.1' 
compile 'com.android.support:palette-v7:22.2.1' 
compile 'com.android.support:recyclerview-v7:22.2.1' 

Эта проблема возникает в нескольких мероприятиях для меня, но в качестве примера я инстанцирования SwipeRefreshLayout просто, как это, нет ничего необычного. Он находится внутри Fragment:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="?android:colorBackground" 
android:orientation="vertical"> 

<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/swipeToRefresh" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


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

</LinearLayout> 

Я инициализировать SwipeRefreshLayout вот так:

private void initSwipeRefreshLayout() { 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      mSwipeRefreshLayout.setRefreshing(true); 
      refreshContent(); 
     } 
    }); 

    mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, 
      android.R.color.holo_green_light, 
      android.R.color.holo_orange_light, 
      android.R.color.holo_red_light); 
} 

private void initRecyclerViewScrollListener() { 
    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 

      visibleItemCount = mRecyclerView.getChildCount(); 
      totalItemCount = mLayoutManager.getItemCount(); 
      firstVisibleItem = mLayoutManager.findFirstCompletelyVisibleItemPosition(); 
      lastVisibleItem = mLayoutManager.findLastCompletelyVisibleItemPosition(); 

      int pageMultiplier = page * PER_PAGE; 

      if (!loading) { 
       if ((pageMultiplier == totalItemCount) && (lastVisibleItem == pageMultiplier - 1)) { 
        loading = true; 
        page += 1; 
        mPresenter.loadMoreStuff(mStuff.getId(), page, PER_PAGE); 
        mSwipeRefreshLayout.setRefreshing(true); 
       } 
      } 
     } 
    }); 
} 

EDIT: Если это уместно, эти проблемы все происходит внутри Fragments

+1

Пробовала ли вы последнюю версию? Это 23.0.1. Кроме того, было бы неплохо, если бы вы могли опубликовать еще несколько кода, связанных с этим SwipeRefreshLayout – scana

+0

Конечно, я могу опубликовать больше кода, но эта проблема возникает в нескольких действиях. Существует общий знаменатель, все проблемы встречаются внутри «Фрагмента». – AndyRoid

+0

Я просто попытался переключиться на 23.0.1, это сработало, было бы здорово, если бы команда Android могла включить сообщение об этом, однако! – AndyRoid

ответ

2

Я считаю, что проблема произошел из-за изменений для SwipeRefreshLayout в v23 по сравнению с v22, то же для RecyclerView. Все работает нормально после переключения на v23.0.1

compile 'com.android.support:appcompat-v7:23.0.1' 
compile 'com.android.support:support-v4:23.0.1' 
compile 'com.android.support:cardview-v7:23.0.1' 
compile 'com.android.support:design:23.0.1' 
compile 'com.android.support:palette-v7:23.0.1' 
compile 'com.android.support:recyclerview-v7:23.0.1'