RecyclerView calls onCreateViewHolder and onBindViewHolder for all elements at once

I have a recyclerView capable of displaying a maximum of 3 items on the screen, but it calls onCreateViewHolder and onBindViewHolder for all 45 items in the list, all at once (as in the LOG below).

Should you not access these methods only when scrolling these items to the screen?

* I use a list with 0 and 1 as a test to determine which layout it should use.

My adapter code

public class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { int[] post_list; private static final int TYPE_0 =0; private static final int TYPE_1=1; private LayoutInflater inflater; private Context context; Activity mActivity; public MyRecyclerAdapter(Context context, int[] list, Activity mActivity){ this.context=context; inflater=LayoutInflater.from(context); this.list=list; this.mActivity = mActivity; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.e("onCreateViewHolder", "CALLED"); if(viewType== TYPE_0){ View view=inflater.inflate(R.layout.layout_type0, parent,false); Type0Holder holder=new Type0Holder(view); return holder; } else{ View view=inflater.inflate(R.layout.layout_type1, parent,false); Type1Holder holder=new Type1Holder (view); return holder; } } @Override public int getItemViewType(int position) { if(list[position]==0) { return TYPE_0; } else { return TYPE_1; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof Type0Holder){ Type0Holder type0Holder = (Type0Holder) holder; type0Holder .mTextView.setText("Layout type 0"); Glide.with(mActivity.getApplicationContext()).load(R.drawable.imageTest).into(type0Holder.mImageView); } else{ Type1Holder type1Holder = (Type1Holder ) holder; type1Holder .mTextView.setText("Layout type 1"); Glide.with(mActivity.getApplicationContext()).load(R.drawable.imageTest).into(type1Holder.mImageView); } Log.e("onBindViewHolder", String.valueOf(position)); } @Override public int getItemCount() { return post_list.length; } class Type0Holder extends RecyclerView.ViewHolder { TextView mTextView; ImageView mImageView; public Type0Holder (View view) { super(view); mTextView= (TextView) itemView.findViewById(R.id.text_view0); mImageView= (ImageView) itemView.findViewById(R.id.image_view0); } } class Type1Holder extends RecyclerView.ViewHolder { TextView mTextView; ImageView mImageView; public ImagePostHolder(View itemView) { super(itemView); mTextView= (TextView) itemView.findViewById(R.id.text_view1); mImageView= (ImageView) itemView.findViewById(R.id.image_view1); } } 

My Recycler xml

  <android.support.v4.widget.NestedScrollView android:id="@+id/nested_scroll_view" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:fillViewport="true" android:paddingBottom="3dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:orientation="vertical" android:clipToPadding="false"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="wrap_content" ></android.support.v7.widget.RecyclerView> </RelativeLayout> </android.support.v4.widget.NestedScrollView> 

My journal shows that it calls all the elements at once, even those that are not visible.

 10-23 15:15:46.093 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.113 28766-28766/com.example..E/HOLDER: 0 10-23 15:15:46.113 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.113 28766-28766/com.example..E/HOLDER: 1 10-23 15:15:46.113 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.123 28766-28766/com.example..E/HOLDER: 2 10-23 15:15:46.123 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.123 28766-28766/com.example..E/HOLDER: 3 10-23 15:15:46.123 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.133 28766-28766/com.example..E/HOLDER: 4 10-23 15:15:46.133 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.133 28766-28766/com.example..E/HOLDER: 5 10-23 15:15:46.143 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.143 28766-28766/com.example..E/HOLDER: 6 10-23 15:15:46.143 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.143 28766-28766/com.example..E/HOLDER: 7 10-23 15:15:46.153 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.153 28766-28766/com.example..E/HOLDER: 8 10-23 15:15:46.153 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.153 28766-28766/com.example..E/HOLDER: 9 10-23 15:15:46.163 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.163 28766-28766/com.example..E/HOLDER: 10 10-23 15:15:46.163 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.163 28766-28766/com.example..E/HOLDER: 11 10-23 15:15:46.173 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.173 28766-28766/com.example..E/HOLDER: 12 10-23 15:15:46.173 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.183 28766-28766/com.example..E/HOLDER: 13 10-23 15:15:46.183 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.183 28766-28766/com.example..E/HOLDER: 14 10-23 15:15:46.183 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.183 28766-28766/com.example..E/HOLDER: 15 10-23 15:15:46.193 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.193 28766-28766/com.example..E/HOLDER: 16 10-23 15:15:46.193 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.193 28766-28766/com.example..E/HOLDER: 17 10-23 15:15:46.203 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.203 28766-28766/com.example..E/HOLDER: 18 10-23 15:15:46.203 28766-28766/com.example..E/CREATE HOLDER: CALLED 10-23 15:15:46.213 28766-28766/com.example.. E/HOLDER: 19 10-23 15:15:46.213 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.213 28766-28766/com.example.. E/HOLDER: 20 10-23 15:15:46.213 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.213 28766-28766/com.example.. E/HOLDER: 21 10-23 15:15:46.223 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.223 28766-28766/com.example.. E/HOLDER: 22 10-23 15:15:46.223 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.233 28766-28766/com.example.. E/HOLDER: 23 10-23 15:15:46.233 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.233 28766-28766/com.example.. E/HOLDER: 24 10-23 15:15:46.233 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.233 28766-28766/com.example.. E/HOLDER: 25 10-23 15:15:46.243 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.243 28766-28766/com.example.. E/HOLDER: 26 10-23 15:15:46.243 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.243 28766-28766/com.example.. E/HOLDER: 27 10-23 15:15:46.253 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.253 28766-28766/com.example.. E/HOLDER: 28 10-23 15:15:46.253 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.253 28766-28766/com.example.. E/HOLDER: 29 10-23 15:15:46.263 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.263 28766-28766/com.example.. E/HOLDER: 30 10-23 15:15:46.263 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.263 28766-28766/com.example.. E/HOLDER: 31 10-23 15:15:46.273 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.283 28766-28766/com.example.. E/HOLDER: 32 10-23 15:15:46.283 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.283 28766-28766/com.example.. E/HOLDER: 33 10-23 15:15:46.293 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.313 28766-28766/com.example.. E/HOLDER: 34 10-23 15:15:46.313 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.323 28766-28766/com.example.. E/HOLDER: 35 10-23 15:15:46.323 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.323 28766-28766/com.example.. E/HOLDER: 36 10-23 15:15:46.333 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.333 28766-28766/com.example.. E/HOLDER: 37 10-23 15:15:46.333 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.343 28766-28766/com.example.. E/HOLDER: 38 10-23 15:15:46.343 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.343 28766-28766/com.example.. E/HOLDER: 39 10-23 15:15:46.343 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.353 28766-28766/com.example.. E/HOLDER: 40 10-23 15:15:46.353 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.353 28766-28766/com.example.. E/HOLDER: 41 10-23 15:15:46.353 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.363 28766-28766/com.example.. E/HOLDER: 42 10-23 15:15:46.363 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.363 28766-28766/com.example.. E/HOLDER: 43 10-23 15:15:46.373 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.373 28766-28766/com.example.. E/HOLDER: 44 10-23 15:15:46.373 28766-28766/com.example.. E/CREATE HOLDER: CALLED 10-23 15:15:46.383 28766-28766/com.example.. E/HOLDER: 45 

UPDATE 1 - I found out that the reason my recyclerView is not being recycled is because it is inside NestedScrowView, so how can I recycle it even if it is inside NestedScrowView?

+5
source share
2 answers

I had the same problem. In my case, NestedScrollView is the root of the Bottom Sheet, and I replaced it with FrameLayout , and it worked.

If you can, try using FrameLayout

0
source

Disable nestedScrolling on RecyclerView:

 mRecyclerView.setNestedScrollingEnabled(false); 
0
source

Source: https://habr.com/ru/post/1258673/


All Articles