Эффект прокрутки снизу не появляется при использовании RecyclerView внутри SwipeRefreshLayout

Я пытаюсь составить список с приятной функцией обновления, но когда у меня есть 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;
    }
}

person emiliopedrollo    schedule 28.09.2016    source источник
comment
Что вы подразумеваете под термином оверскролл. Не могли бы вы объяснить или предоставить изображение на вопрос о том, чего вы пытаетесь достичь?   -  person Michael Spitsin    schedule 28.09.2016


Ответы (1)


вы можете включить обновление, когда 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();
            }
        }
});
person Pranav Agrawal    schedule 28.09.2016
comment
@Pranav, pullToRefresh о чем ты?? - person ken; 15.03.2017
comment
@ken pullToRefresh является объектом SwipeRefreshLayout. - person Pranav Agrawal; 16.03.2017