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
Rafael Toledo
August 25, 2017
Programming
4
330
Fragments
Apresentada na Android Dev Conference 2017
Rafael Toledo
August 25, 2017
Tweet
Share
More Decks by Rafael Toledo
See All by Rafael Toledo
Gamedev com Kotlin Native
rafaeltoledo
0
58
Kotlin Multiplataforma: Compartilhando código entre Android e iOS
rafaeltoledo
0
280
Motion Layout
rafaeltoledo
1
110
Pipeline Android
rafaeltoledo
3
130
Android Architecture Components
rafaeltoledo
7
130
What's New in Kotlin 1.3
rafaeltoledo
0
130
An Overview of Multiplatform Kotlin
rafaeltoledo
2
110
Compartilhando Código com Kotlin Multiplataforma
rafaeltoledo
2
230
Android Assíncrono
rafaeltoledo
3
200
Other Decks in Programming
See All in Programming
subpath importsで始めるモック生活
10tera
0
320
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
みんなでプロポーザルを書いてみた
yuriko1211
0
280
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
120
Contemporary Test Cases
maaretp
0
140
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
カンファレンスの「アレ」Webでなんとかしませんか? / Conference “thing” Why don't you do something about it on the Web?
dero1to
1
110
RubyLSPのマルチバイト文字対応
notfounds
0
120
Macとオーディオ再生 2024/11/02
yusukeito
0
370
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
Adopting Sorbet at Scale
ufuk
73
9.1k
Side Projects
sachag
452
42k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Art, The Web, and Tiny UX
lynnandtonic
297
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Statistics for Hackers
jakevdp
796
220k
Agile that works and the tools we love
rasmusluckow
327
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Into the Great Unknown - MozCon
thekraken
32
1.5k
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