5

화면에 최대 3 개의 항목을 표시 할 수있는 recyclerView를 가지고 있지만 목록의 45 개 항목 모두에 대해 onCreateViewHolder 및 onBindViewHolder를 모두 호출합니다 (LOG 이하).RecyclerView는 모든 항목에 대해 동시에 onCreateViewHolder 및 onBindViewHolder를 호출합니다.

해당 항목을 화면으로 스크롤 할 때만 해당 메소드를 호출하면 안됩니까?

* 어떤 레이아웃을 사용해야하는지 정의하기 위해 0과 1의 목록을 테스트로 사용하고 있습니다. 그것은 한 번에 모든 항목을 볼 수없는 경우에도 사람을 호출 보여주는

내 어댑터 코드

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); 
    } 
} 

내 휴지통의 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> 

내 LOG.

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 - 나는 그것이 NestedScrowView 내부에 있기 때문에 내 recyclerView 재활용을하지 않은 이유는 것을 발견, 그래서 심지어는 경우가 NestedScrowView 내부의보기를 재활용 어떻게해야합니까?

+0

당신이에 대한 해결책을 찾았나요? 내 케이스에 –

답변

0

나는 동일한 문제가있었습니다. 내 경우에는 NestedScrollView이 Bottom Sheet의 루트이고 FrameLayout으로 바뀌었고 작동했습니다.

당신이 할 수있는 경우에, 당신은 RecyclerView에 FrameLayout

+0

이 있으면 NestedScroll을 사용해야합니다. 이걸 없애는 방법? – GvSharma

0

안 nestedScrolling를 사용하여 시도해야합니다 :

mRecyclerView.setNestedScrollingEnabled(false);