2

Я пытаюсь создать список с красивым эффектом для обновления, но когда у меня есть RecyclerView внутри SwipeRefreshLayout, эффект overscroll работает только тогда, когда он освежает. Даже для нижней части списка. Что происходит, так это то, что у пользователя нет такой визуальной подсказки, что список закончился.Эффект Overscroll снизу не отображается при использовании RecyclerView внутри SwipeRefreshLayout

Вот мой XML:

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

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

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

А Класс Фрагменте:

public class MyListFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { 
    private SwipeRefreshLayout swipeRefreshLayout; 
    private RecyclerView recyclerView; 


    static final String[] lines = new String[]{ 
     "this is line #1", 
     "this is line #2" 
     "this is line #3" 
     "this is line #4" 
     "this is line #5" 
     "this is line #6" 
     "this is line #7" 
    }; 

    @Override 
    public void onRefresh() { 
     Log.i("QUESTION_LIST_REFRESH", "onRefresh called from SwipeRefreshLayout"); 
     new Handler().postDelayed(new Runnable() { 
      @Override public void run() { 
       swipeRefreshLayout.setRefreshing(false); 
      } 
     }, 4000); 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     recyclerView = (RecyclerView) view.findViewById(R.id.questions_list); 

     swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_question_list); 
     swipeRefreshLayout.setOnRefreshListener(this); 
     swipeRefreshLayout.setColorSchemeColors(
       ContextCompat.getColor(getContext(),R.color.colorPrimaryDark), 
       ContextCompat.getColor(getContext(),R.color.colorAccent)); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_list, container, false); 

     recyclerView = (RecyclerView) view.findViewById(R.id.recycler_vew); 
     recyclerView.setHasFixedSize(true); 

     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     recyclerView.setLayoutManager(layoutManager); 


     recyclerView.setAdapter(new MyListAdapter(lines)); 

     return view; 
    } 
} 
+0

Что вы подразумеваете под термином «overscroll». Не могли бы вы объяснить или представить изображение вопроса о том, чего вы пытаетесь достичь? –

ответ

5

вы можете включить освежающий, когда recyclerview достиг своей верхней позиции. Это решит вашу проблему?

rv.addOnScrollListener(new RecyclerView.OnScrollListener() { 


     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 

      try { 

       LinearLayoutManager layoutManager = ((LinearLayoutManager) rv.getLayoutManager()); 
       int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); 


       Log.e("refresh", "State - " + newState + " : firstVisiblePosition" + firstVisiblePosition); 
       if (firstVisiblePosition == 0) 
        pullToRefresh.setEnabled(true); 
       else 
        pullToRefresh.setEnabled(false); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
}); 
+0

Это работало удивительно. Спасибо. – emiliopedrollo

+0

@Pranav, 'pullToRefresh' ссылаются на то, что ya ?? – ken

+0

@ken pullToRefresh - объект SwipeRefreshLayout. –

Смежные вопросы