SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
Despre mine
• Diaconu Andrei
• Developer din 2007
• Pasionat de tehnologie
Android?
Cine a folosit ListView?
RecyclerView?
RecyclerView
CardView
Elevation
Activity Transitions
Ripple
Palette
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
Adaugare
Mutare
Animatii multiple
Runda 4: Header
Header
Footer
list.addHeaderView
RecyclerViewListView
Adaptor special
Pentru pozitia 0 returnam header
Pentru alte pozitii decalam cu 1
RecyclerViewListView
Adaptor special
Pentru pozitia 0 returnam header
Pentru alte pozitii decalam cu 1
RecyclerViewListView
Adaptor special
Pentru pozitia 0 returnam header
Pentru 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

Weitere ähnliche Inhalte

Mehr von Diaconu Andrei-Tudor

Performance tools Droidcon Eastern Europe
Performance tools Droidcon Eastern EuropePerformance tools Droidcon Eastern Europe
Performance tools Droidcon Eastern EuropeDiaconu Andrei-Tudor
 
FiiPractic 2015 - Adroid Pro - Day 7 - Follow-up Day
FiiPractic 2015 - Adroid Pro - Day 7 - Follow-up DayFiiPractic 2015 - Adroid Pro - Day 7 - Follow-up Day
FiiPractic 2015 - Adroid Pro - Day 7 - Follow-up DayDiaconu Andrei-Tudor
 
FiiPractic 2015 - Adroid Pro - Day 5 - SQL Day
FiiPractic 2015 - Adroid Pro - Day 5 - SQL DayFiiPractic 2015 - Adroid Pro - Day 5 - SQL Day
FiiPractic 2015 - Adroid Pro - Day 5 - SQL DayDiaconu Andrei-Tudor
 
FiiPractic 2015 - Adroid Pro - Day 3 - API Day
FiiPractic 2015 - Adroid Pro - Day 3 - API DayFiiPractic 2015 - Adroid Pro - Day 3 - API Day
FiiPractic 2015 - Adroid Pro - Day 3 - API DayDiaconu Andrei-Tudor
 
FiiPractic 2015 - Adroid Pro - Day 1 - UI Day
FiiPractic 2015 - Adroid Pro - Day 1 - UI DayFiiPractic 2015 - Adroid Pro - Day 1 - UI Day
FiiPractic 2015 - Adroid Pro - Day 1 - UI DayDiaconu Andrei-Tudor
 

Mehr von Diaconu Andrei-Tudor (6)

Mobile testing in the cloud
Mobile testing in the cloudMobile testing in the cloud
Mobile testing in the cloud
 
Performance tools Droidcon Eastern Europe
Performance tools Droidcon Eastern EuropePerformance tools Droidcon Eastern Europe
Performance tools Droidcon Eastern Europe
 
FiiPractic 2015 - Adroid Pro - Day 7 - Follow-up Day
FiiPractic 2015 - Adroid Pro - Day 7 - Follow-up DayFiiPractic 2015 - Adroid Pro - Day 7 - Follow-up Day
FiiPractic 2015 - Adroid Pro - Day 7 - Follow-up Day
 
FiiPractic 2015 - Adroid Pro - Day 5 - SQL Day
FiiPractic 2015 - Adroid Pro - Day 5 - SQL DayFiiPractic 2015 - Adroid Pro - Day 5 - SQL Day
FiiPractic 2015 - Adroid Pro - Day 5 - SQL Day
 
FiiPractic 2015 - Adroid Pro - Day 3 - API Day
FiiPractic 2015 - Adroid Pro - Day 3 - API DayFiiPractic 2015 - Adroid Pro - Day 3 - API Day
FiiPractic 2015 - Adroid Pro - Day 3 - API Day
 
FiiPractic 2015 - Adroid Pro - Day 1 - UI Day
FiiPractic 2015 - Adroid Pro - Day 1 - UI DayFiiPractic 2015 - Adroid Pro - Day 1 - UI Day
FiiPractic 2015 - Adroid Pro - Day 1 - UI Day
 

ListView vs RecyclerView