Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Fragments
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Rafael Toledo
August 25, 2017
Programming
360
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Fragments
Apresentada na Android Dev Conference 2017
Rafael Toledo
August 25, 2017
More Decks by Rafael Toledo
See All by Rafael Toledo
Gamedev com Kotlin Native
rafaeltoledo
0
110
Kotlin Multiplataforma: Compartilhando código entre Android e iOS
rafaeltoledo
0
310
Motion Layout
rafaeltoledo
1
180
Pipeline Android
rafaeltoledo
3
200
Android Architecture Components
rafaeltoledo
7
200
What's New in Kotlin 1.3
rafaeltoledo
0
170
An Overview of Multiplatform Kotlin
rafaeltoledo
2
170
Compartilhando Código com Kotlin Multiplataforma
rafaeltoledo
2
300
Android Assíncrono
rafaeltoledo
3
250
Other Decks in Programming
See All in Programming
初めてのKubernetes 本番運用でハマった話
oku053
0
120
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
200
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
160
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.4k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
140
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
800
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Claude Team Plan導入・ガイド
tk3fftk
0
180
symfony/aiとlaravel/boost
77web
0
120
霧の中の代数的エフェクト
funnyycat
1
350
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Between Models and Reality
mayunak
4
370
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Why Our Code Smells
bkeepers
PRO
340
58k
We Have a Design System, Now What?
morganepeng
55
8.2k
Crafting Experiences
bethany
1
210
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Transcript
FRAGMENTS Rafael Toledo @_rafaeltoledo
None
FRAGMENTS
None
POR QUE USAR FRAGMENTS?
POR QUE NÃO USAR FRAGMENTS?
LIFECYCLE
LIFECYCLE
LIFECYCLE
LIFECYCLE
LIFECYCLE
LIFECYCLE [CRIES IN ANDROIDISH]
WTF??? • IllegalStateException • getActivity() == null • executePendingTransactions() •
<fragment>
WTF???
EM 2017, VALE A PENA USAR FRAGMENTS?
EM 2017, VALE A PENA USAR FRAGMENTS?
DIFERENTES LAYOUTS, DIFERENTES TELAS
DIFERENTES TAMANHOS DE TELA
DIFERENTES TAMANHOS DE TELA Nexus One!
Quem usa tablet hoje em dia???
DIFERENTES TAMANHOS DE TELA Moto C (480x854) Samsung Galaxy S8+
(1440x2960)
DIFERENTES TAMANHOS DE TELA
Quem usa app em landscape???
Quem usa app em landscape??? EU!
ENCAPSULAMENTO DA NAVEGAÇÃO
ENCAPSULAMENTO DE NAVEGAÇÃO
ENCAPSULAMENTO DE NAVEGAÇÃO getSupportFragmentManager() .beginTransaction() .add(R.id.container, new Step1Fragment()) .addToBackStack(null) .commit();
// Back button = fragmentManager.popBackStack()
ENCAPSULAMENTO DE NAVEGAÇÃO getSupportFragmentManager() .beginTransaction() .add(R.id.container, new Step1Fragment()) .addToBackStack(null) .commit();
BACKSTACK? !=
BACKSTACK? Volta para a home
BACKSTACK?
BACKSTACK? Volta para a home?
BACKSTACK? Toolbar na Activity Fragment com conteúdo
BACKSTACK getSupportFragmentManager() .beginTransaction() .add(R.id.container, new Step1Fragment()) .addToBackStack(null) // ??? .commit();
BACKSTACK getSupportFragmentManager() .beginTransaction() .add(R.id.container, new Step1Fragment()) .addToBackStack("Cart") .commit();
BACKSTACK getSupportFragmentManager() .beginTransaction() .add(R.id.container, new Step1Fragment()) .addToBackStack("Cart") .commit(); fragmentManager.popBackStack("Cart"); fragmentManager.popBackStack("Cart",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
STATEFUL DIALOGS
POR QUE EU PRECISO DE DIALOGS COM ESTADO?
MUDANÇAS DE CONFIGURAÇÃO
EVITANDO INTERAÇÕES DEAD-END
CUIDADO COM O DIALOG INFINITO
COMPONENTIZAÇÃO DA UI
COMPONENTIZAÇÃO DA UI Fragments como uma porção da Activity View
Fragment View Fragment Fragment Activity Fragment Activity
// Dentro do Fragment ((MainActivity) getActivity()).method(); COMPONENTIZAÇÃO DA UI -
DON'T!
// Dentro do Fragment ((MainActivity) getActivity()).method(); COMPONENTIZAÇÃO DA UI -
DON'T!
// Dentro da View ((MainActivity) context).method(); COMPONENTIZAÇÃO DA UI -
DON'T!
// Dentro da View ((MainActivity) context).method(); COMPONENTIZAÇÃO DA UI -
DON'T!
OLHA O REÚSO...
FALANDO EM VIEWS...
CUSTOM VIEWS x FRAGMENTS • Micro interações isoladas? Custom Views!
• Interação complexa, lida com rede, hardware, intents? Fragments! • View Pager? •Com interação rica (é uma tela de fato?) - Fragments! •Conteúdo simples (carrossel, vitrine, cards?) - Custom Views!
VOLTANDO...
COMO TROCAR DADOS ENTRE FRAGMENTS?
COMO TROCAR DADOS ENTRE FRAGMENTS? • EventBus?
COMO TROCAR DADOS ENTRE FRAGMENTS? • EventBus?
COMO TROCAR DADOS ENTRE FRAGMENTS? • EventBus? • Através da
Activity, implementando um listener
COMO TROCAR DADOS ENTRE FRAGMENTS? • EventBus? • Através da
Activity, implementando um listener • Architecture Components!
COMO TROCAR DADOS ENTRE FRAGMENTS? • EventBus? • Através da
Activity, implementando um listener • Architecture Components!
// No Fragment viewModel = ViewModelProviders.of(this) .get(MyViewModel.class); COMO TROCAR DADOS
ENTRE FRAGMENTS?
// No Fragment viewModel = ViewModelProviders.of(getActivity()) .get(MyViewModel.class); COMO TROCAR DADOS
ENTRE FRAGMENTS?
// No Fragment viewModel = ViewModelProviders.of(getActivity()) .get(MyViewModel.class); COMO TROCAR DADOS
ENTRE FRAGMENTS?
INICIALIZAÇÃO DE COMPONENTES
<fragment android:name="com.google.android.gms.maps.MapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /> INICIALIZAÇÃO DE COMPONENTES
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); INICIALIZAÇÃO DE COMPONENTES
MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { ... mapView
= findViewById(R.id.map); } INICIALIZAÇÃO DE COMPONENTES
@Override public void onStart() { super.onStart(); mapView.onStart(); } @Override public
void onStop() { mapView.onStop(); super.onStop(); } INICIALIZAÇÃO DE COMPONENTES
@Override public void onStart() { super.onStart(); mapView.onStart(); } @Override public
void onStop() { mapView.onStop(); super.onStop(); } INICIALIZAÇÃO DE COMPONENTES Boilerplate?
<fragment android:name="com.google.android.gms.maps.MapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" app:apiKey="1234567890abcdef" /> INICIALIZAÇÃO DE COMPONENTES
<fragment android:name="com.google.android.gms.maps.MapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" app:apiKey="1234567890abcdef" /> INICIALIZAÇÃO DE COMPONENTES
@Override public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) {
... } INICIALIZAÇÃO DE COMPONENTES
@Override public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) {
... } INICIALIZAÇÃO DE COMPONENTES
@Override public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) {
... } INICIALIZAÇÃO DE COMPONENTES
DICAS FINAIS • Sempre guarde estado dos seus Fragments! •
setRetainInstance(true) não deve ser usado para Fragments com Views! (Architecture Components usa!)
QUE TAL DAR UMA SEGUNDA CHANCE AOS FRAGMENTS?
Fragment Tricks youtube.com/watch?v=eUG3VWnXFtg What the Fragment? youtube.com/watch?v=k3IT-IJ0J98 Documentação developer.android.com/guide/components/fragments.html LINKS
Fragment Tricks youtube.com/watch?v=eUG3VWnXFtg What the Fragment? youtube.com/watch?v=k3IT-IJ0J98 Documentação developer.android.com/guide/components/fragments.html LINKS
Centro Av. Presidente Wilson, 231 - 29º andar (21) 2240-2030
Cidade Monções Av. Nações Unidas, 11.541 - 3º andar (11) 4119-0449 Savassi Av. Getúlio Vargas, 671 Sala 800 - 8º andar (31) 3360-8900 www.concrete.com.br speakerdeck.com/rafaeltoledo github.com/rafaeltoledo twitter.com/_rafaeltoledo