5

Tôi có recyclerView có khả năng hiển thị tối đa 3 mục trên màn hình, nhưng nó gọi onCreateViewHolder và onBindViewHolder cho tất cả 45 mục trong danh sách, tất cả cùng một lúc (như trong LOG phía dưới).RecyclerView gọi onCreateViewHolder và onBindViewHolder cho tất cả các mục cùng một lúc

Không nên gọi các phương thức đó chỉ khi tôi cuộn các mục đó vào màn hình?

* Tôi đang sử dụng danh sách có 0 và 1 làm thử nghiệm để xác định bố cục nào nên sử dụng.

My Adaptor Mã

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

Recycler xml My

<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 tôi thấy nó đang kêu gọi tất cả các mục cùng một lúc, thậm chí những người mà không nhìn thấy được.

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 - Tôi phát hiện ra rằng lý do recyclerView tôi không phải là tái chế là bởi vì nó là bên trong một NestedScrowView, vì vậy làm thế nào để làm cho nó tái chế quan điểm thậm chí nếu nó bên trong NestedScrowView?

+0

Bạn đã tìm thấy một giải pháp cho điều này? –

Trả lời

0

Tôi gặp vấn đề tương tự. Trong trường hợp của tôi NestedScrollView là thư mục gốc cho Trang tính dưới cùng và tôi đã thay thế nó bằng một số FrameLayout và đã hoạt động.

Nếu bạn có thể, bạn nên thử sử dụng một FrameLayout

+0

trong mycase, tôi cần sử dụng NestedScroll. Làm thế nào để thoát khỏi điều này? – GvSharma

0

Disable nestedScrolling trên RecyclerView:

mRecyclerView.setNestedScrollingEnabled(false); 
Các vấn đề liên quan