O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Recyclerview view types

194 visualizações

Publicada em

Slides de palestra sobre viewtypes utilizando recyclerview.

Publicada em: Celular
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Recyclerview view types

  1. 1. Desenvolvedora Android Criando uma lista heterogênea com recyclerview e viewtypes Paula Rosa
  2. 2. RecyclerView RecyclerView LayoutManager Adapter Dados • Somente a RecyclerView atualiza o adapter. • O LayoutManager cuida de calcular o layout para saber quantos itens caberão a cada scroll • Quando a lista sofre um scroll, a RecyclerView avisa o LayoutManager e ele escrola a lista. • Aumenta consideravelmente a performance da lista, pois pode alterar somente uma parte (range) da lista • Animações mais fáceis de codificar;
  3. 3. Lista Heterogêna • Quando se precisa inflar mais de um tipo de layout, e que tenham formato de lista • Quando uma lista precisa de header • Quando precisar de muita performance Quando usar?
  4. 4. ViewTypes • É uma forma do android entender que há vários tipos de views na recyclerview • Sendo assim, se cria um ViewHolder para cada tipo de View (ViewType) • O bind das views é feito baseado também no ViewType
  5. 5. Exemplo ContactList Categoria Family Friends Work
  6. 6. if(!familyList.isEmpty()) { recyclerData.add(null); recyclerData.addAll(familyList); } else if(!friendsList.isEmpty()) { recyclerData.add(null); recyclerData.addAll(friendsList); } private List<Contact> recyclerData = new ArrayList<>(); for(int i = 0; i < contactList.size(); i++) { if(contactList.get(i).getCategory() == Contact.Category.FAMILY) { familyList.add(contactList.get(i)); } else if(….) { //TODO } Separa Listas Cria uma lista de dados
  7. 7. getItemCount() —> return int Tipos diferentes de views • Retorna tamanho total da lista (itens da lista + headers) • Ou retorna o tamanho da lista de dados (recyclerData) @Override public int getItemCount() { return recyclerData.size(); }
  8. 8. getItemViewType(int position) —> return int • Retorna o viewType desejado para determinada posição @Override public int getItemViewType(int position) { if (position == 0) { return VIEW_TYPE_CATEGORY; } else if (position == familyList.size() +1) { return VIEW_TYPE_CATEGORY; } else if (…){ (…) } } @Override public int getItemViewType(int position) { if (recyclerData.get(position) == null) { return VIEW_TYPE_CATEGORY; } else { return VIEW_TYPE_CONTACT_LIST; } }
  9. 9. ViewHolder • Cria ViewHolder para cada tipo de View static class ViewHolderContactList extends BaseViewHolder { TexView contactName; public ViewHolderContactList(View view) { super(view); contactName = (TextView) view.findViewById(R.id.name); (…) } } BaseViewHolder -> Classe Abstrata que herda de RecyclerView.ViewHolder
  10. 10. onCreateViewHolder(ViewGroup parent, int viewType) —> return BaseViewHolder • Retorna o viewType desejado para determinada posição @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.ViewHolder viewHolder; if (viewType == VIEW_TYPE_CATEGORY) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.view_header_category, parent, false); viewHolder = new ViewHolderCategory(view); } else { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.view_item_contact, parent, false); viewHolder = new ViewHolderContactList(view); } }
  11. 11. onBindViewHolder(BaseViewHolder parent, int position) —> return int • Seta os valores de cada view em determinada posição @Override public void onBindViewHolder(BaseViewHolder parent, int position) { BaseViewHolder viewHolder; if (getItemViewType(position) == VIEW_TYPE_CATEGORY) { ViewHolderCategory viewHolderCategory = (ViewHolderCategory) holder; (…) viewHolderCategory.categoryName.setText(categoria); } else { ViewHolderContactList viewHolderContact = (ViewHolderContactList) holder; (…) viewHolderContact.contactName.setText(recyclerData.get(position).getName); } }
  12. 12. finaly {} • https://github.com/paulacr/ViewTypesRecyclerView • https://guides.codepath.com/android/Heterogenous-Layouts-inside- RecyclerView

×