Я столкнулся с двумя проблемами:
- Слушатель прокрутки не работает
-
RecyclerView
никогда не перерабатывает какие-либо представления при прикреплении кNestedScrollView
. Он действует как линейный макет внутри ScrollView. Он использует много памяти и создает лага.
Я прикрепляю фрагмент проигрывателя YouTube поверх представления recycler, так как я не могу поместить фрагмент в представление recycler. В моем коде вы видите, что есть макет кадра.
Мой макет выглядит следующим образом:
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nestedScroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_alignParentTop="true"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/youtube_layout"
android:visibility="visible"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Я хочу использовать прослушиватель прокрутки для загрузки большего количества элементов поэтому я попробовал следующее:
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
Log.i(TAG, "onScrolled: ");
// bail out if scrolling upward or already loading data
if (dy < 0 || dataLoading.isDataLoading()) return;
final int visibleItemCount = recyclerView.getChildCount();
final int totalItemCount = layoutManager.getItemCount();
final int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
if ((totalItemCount - visibleItemCount) <= (firstVisibleItem )) {
onLoadMore();
}
}
Но layoutManager.findFirstVisibleItemPosition()==0
, чтобы он не работал, и более onScrolled never called twice
, так как я установил
recyclerview.setNestedScrollingEnabled(ложь)
поэтому я попытался в onBindView
, как этот
public void onBindViewHolder(RecyclerView.ViewHolder customViewHolder, int i) {
Log.w("d","inside bind view");
if(i>=getItemCount()-1 && !datamanager.isDataLoading()){
datamanager.loadmoreData();
}
но recylerview связывает все представления одновременно, прежде чем я даже начну прокрутку, поэтому этот метод также не работает.