2017-12-19 25 views
0

뷰 홀더 패턴에 대한 질문이 있습니다. 내가보기 홀더와 재활용 뷰를 가지고 있고, 구글에서 사람이 가장 좋은 방법은 다음과 같이 그것을 구현하는 것이라고 말했다RecyclerView, happyVewHolder 패턴

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

private List<ListItem> listItems; 
private Context context; 

public MyAdapter(List<ListItem> listItems, Context context) { 
    this.listItems = listItems; 
    this.context = context; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_item, parent, false); 
    final ViewHolder viewHolder = new ViewHolder(v); 

    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.bindTo(listItems.get(position), context); 
} 

@Override 
public int getItemCount() { 
    return listItems.size(); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 

    private TextView txtHead; 
    private TextView txtDesc; 
    private ImageView imageView; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     txtHead = (TextView) itemView.findViewById(R.id.txtHead); 
     txtDesc = (TextView) itemView.findViewById(R.id.txtDescription); 
     imageView = (ImageView) itemView.findViewById(R.id.imageView); 
    } 

    public void bindTo(ListItem item, Context context){ 
     txtHead.setText(item.getHead()); 
     txtDesc.setText(item.getDesc()); 
     Picasso.with(context) 
       .load(item.getImageUrl()) 
       .into(imageView); 
    } 
} 
} 

당신이 onBind 방법을 보면, 그것은보기 홀더 클래스의 메소드를 호출 . 이는 Google의 RecyclerView 팀원이 작성한 지침에 따라 구현되었습니다. 제 질문은이 점이 더 나은 이유입니다.

답변

0

정말 중요한 문제입니다. 그것은 기본적으로 ViewHolder의 바인딩 데이터의 책임을 ViewHolder 자체에 위임합니다.

여러 뷰 홀더 클래스가있는 여러 뷰 유형이있는 경우 다형성을 사용하여 실제 뷰 홀더의 구체적인 유형을 알 필요없이 데이터 바인딩에 동일한 메소드를 호출 할 수 있습니다.

ViewHolders를 자신의 클래스 (정적 내부 클래스가 아닌)로 옮기더라도 어댑터는 작고 예쁜 것입니다.

+0

기본적으로 현명한 성능 현명한이 무엇입니까? –

+0

뷰 홀더 패턴은 성능 향상을 위해 매우 중요하지만 어댑터 또는 뷰 홀더에 바인딩 코드가 있으면 코드를 구성하기 만하면됩니다 – elmorabea