Diaconu andrei list view vs recyclerview in android l

Preview:

DESCRIPTION

CodeCampIasi25Oct2014

Citation preview

Despre mine

• Diaconu Andrei

• Developer din 2007

• Pasionat de tehnologie

Android?

Cine a folosit ListView?

RecyclerView?

RecyclerViewCardViewElevation

Activity TransitionsRipplePalette

Tint

Android Lollipop

Runda 1: Layout

ListView RecyclerView

Adaptor

RecyclerViewListView

GridView

Adaptor

RecyclerView

ListView RecyclerView

RecyclerView

Adaptor+

ViewHolder

Layout Manager

ListView

Runda 2: Item Click

setOnItemClickListener

RecyclerViewListView

listview.setOnItemClickListener( onItemClick(list, view, position, id))

RecyclerViewListView

Click Listener pe fiecare View

RecyclerViewListView

Adaptor{ onBindViewHolder(viewHolder, position) { viewHolder.card.setOnClickListener( onClick(view) ); }}

RecyclerViewListView

Adaptor{ onBindViewHolder(…, final position) { viewHolder.card.setOnClickListener( onClick(view) ); }}

RecyclerViewListView

Daca sterg un view?

RecyclerViewListView

Adaptor{ onBindViewHolder(viewHolder, position) { viewHolder.card.setOnClickListener( onClick(view){ int pos = recycler.getChildPosition(view);

} ); }}

RecyclerViewListView

Adaptor cuplat cu recycler

RecyclerViewListView

Adaptor

Adaptor{ onCreateViewHolder(…) { viewHolder.card.setOnClickListener(extern); }}

RecyclerViewListView

Runda 3: Animatii

Ce trebuie facut?

RecyclerViewListView

ValueAnimator

RecyclerViewListView

RecyclerViewListView

initialHeight = view.getHeight();ValueAnimator .ofFloat(1,0) .addUpdateListener( onAnimationUpdate(value) { view.height = initialHeight * value; view.requestLayout(); }) .start();

RecyclerViewListView

initialHeight = view.getHeight();ValueAnimator .ofFloat(1,0) .addUpdateListener( onAnimationUpdate(value) { view.height = initialHeight * value; view.requestLayout(); }) .start();

RecyclerViewListView

initialHeight = view.getHeight();ValueAnimator .ofFloat(1,0) .addUpdateListener( onAnimationUpdate(value) { view.height = initialHeight * value; view.requestLayout(); }) .start();

RecyclerViewListView

initialHeight = view.getHeight();ValueAnimator .ofFloat(1,0) .addUpdateListener( onAnimationUpdate(value) { view.height = initialHeight * value; view.requestLayout(); }) .start();

Transient State

RecyclerViewListView

Notificam adaptorul

RecyclerViewListView

Mutare?Adaugare?

Animatii multiple?

RecyclerViewListView

RecyclerViewListView

ItemAnimator

RecyclerViewListView

recycler.setItemAnimator( animateRemove(viewHolder) { viewHolder.card .animate() .scaleY(0) .start(); return false; }});

RecyclerViewListView

recycler.setItemAnimator( animateRemove(viewHolder) { viewHolder.card .animate() .scaleY(0) .start(); return false; }});

RecyclerViewListView

recycler.setItemAnimator( animateRemove(viewHolder) { viewHolder.card .animate() .scaleY(0) .start(); return false; }});

RecyclerViewListView

Adaptor mai granulat

RecyclerViewListView

AdaugareMutare

Animatii multiple

Runda 4: Header

Header

Footer

list.addHeaderView

RecyclerViewListView

Adaptor specialPentru pozitia 0 returnam headerPentru alte pozitii decalam cu 1

RecyclerViewListView

Adaptor specialPentru pozitia 0 returnam headerPentru alte pozitii decalam cu 1

RecyclerViewListView

Adaptor specialPentru pozitia 0 returnam headerPentru alte pozitii decalam cu 1

RecyclerViewListView

if (p == 0) return header;else

return adaptor.get(p-1)

RecyclerViewListView

Runda 5 - Updates

update la telefon

RecyclerViewListView

update la sdk

RecyclerViewListView

Cum migram?

Echivalentul ListView

RecyclerView recycler = findViewById();

recycler.setLayoutManager( new LinearLayoutManager(VERTICAL, false));

recycler.setAdapter(new MyAdapter(data));

Echivalentul BaseAdapter

MyAdapter { onCreateViewHolder(parent, viewType) { View v = inflate layout; ViewHolder vh = new ViewHolder(v); return vh; }

onBindViewHolder(viewHolder, position) { DataItem user = data.get(position); viewHolder.text.setText(user.name); }}

• ListView itemClick vs click listener clasic

• ListView headers vs headere proprii