Итак, я пытаюсь получить атрибут scrollY из моего RecycleView (чтобы увидеть позицию, в которой я прокручиваю в CardList. У меня есть следующая настройка
Во-первых, основное действие, в котором находится макет SlidingTabs, который имеет макет SwipeToFresh в качестве дочернего элемента и ViewPager для 2 фрагментов вкладок, например:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.popal.soul.MovieListActivity">
<com.example.popal.soul.SlidingTabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="2dp"
android:background="@color/ColorPrimary"/>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipeContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1">
</android.support.v4.view.ViewPager>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
Затем у меня есть каждый фрагмент с идентичным макетом, например, с RecycleView :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.RecyclerView
android:id="@+id/cardList"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
И, наконец, макет для каждой карты RecycleView (я не думаю, что это имеет значение, но я все равно добавлю его)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardCornerRadius="4dp"
android:layout_margin="5dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/selectableItemBackground">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@color/bkg_card"
android:text="Movie Title"
android:gravity="center_vertical"
android:textColor="@android:color/white"
android:textSize="14dp"/>
<ImageView
android:elevation="5dp"
android:scaleType="fitCenter"
android:layout_width="100dp"
android:layout_height="150dp"
android:id="@+id/imageViewPoster"
android:text="Poster"
android:gravity="center_vertical"
android:layout_below="@id/title"
android:layout_marginTop="10dp"
android:layout_marginLeft="5dp"/>
<ImageView
android:id="@+id/imageViewFanart"
android:scaleType="fitCenter"
android:layout_alignBottom="@+id/imageViewPoster"
android:layout_toEndOf="@+id/imageViewPoster"
android:layout_width= "235dp"
android:layout_height="122dp"
android:layout_marginRight="5dp"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
Теперь я пытаюсь получить позицию прокрутки элементов RecycleView из основного действия, где определен макет SwipeToRefresh. Мне нужно сделать это, чтобы реализовать этот обходной путь в отношении ошибки в макете SwipeToRefresh, где попытка прокрутки вверх из нижней части списка вызовет вызов обновления: SwipeRefreshLayout + WebView, когда позиция прокрутки находится вверху , но, как видите, оба решения требуют доступа к Swipe Container и RecycleView, в тот же класс или вид деятельности.
Я пытался использовать что-то вроде int scrollY = pager.getChildAt(pager.getCurrentItem()).getScrollY();
Который теоретически должен возвращать позицию дочернего элемента (в данном случае RecycleView), но он по-прежнему возвращает 0 (добавлены записи журнала для получения событий в реальном времени при изменении состояния прокрутки), например, если бы все еще возвращалась позиция адаптер ViewPage.
У кого-нибудь есть идея?
RecyclerView
. Эта концепция описана здесь более подробно с некоторым примером кода. - person MH.   schedule 27.09.2015getScrollY();
возвращает позицию в списке, а прослушивательOnScrollListener
для RecycleView, который я затем могу переопределить внутри него методомpublic void onScrolled(RecyclerView recycleList, int dx, int dy)
с помощью этогоint position = ((LinearLayoutManager) recycleList.getLayoutManager()).findFirstVisibleItemPosition();
. position вернет текущую позицию прокрутки, и в сочетании с вашим ответом я смогу включить ее в свою основную деятельность. Большое спасибо. - person Alex   schedule 28.09.2015