Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Grenade - Type safe intent buidler
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Keisuke Kobayashi
October 26, 2016
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Grenade - Type safe intent buidler
potatotips 34
Keisuke Kobayashi
October 26, 2016
More Decks by Keisuke Kobayashi
See All by Keisuke Kobayashi
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
AI 1st でエンタープライズ SaaS を立ち上げる / AI 1st Enterprise SaaS
kobakei
1
310
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
3.1k
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.8k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
1k
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
12k
Kyashアプリ開発の現場
kobakei
4
3k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
350
APIクライアントをCodableで置き換えた話
kobakei
0
1.7k
Other Decks in Programming
See All in Programming
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
290
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
480
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
150
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.7k
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.3k
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2k
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
410
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
380
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
120
一人だけ、Kiroが静止する日
hideg
0
120
Heart of Swift Concurrency
koher
0
890
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
23k
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Deep Space Network (abreviated)
tonyrice
0
310
My Coaching Mixtape
mlcsv
0
320
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Navigating Team Friction
lara
192
16k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Transcript
(SFOBEF 5ZQFTBGFJOUFOUCVJMEFS ,FJTVLF,PCBZBTIJ QPUBUPUJQT
,FJTVLF,PCBZBTIJ w (JU)VC 2JJUB!LPCBLFJ w 5XJUUFS!LTL@LCZT w $PVCJD *OD w
"OESPJE#BDLFOEFOHJOFFS
໌ࣔత*OUFOUͷ࡞Γํ
#BTJD Intent intent = new Intent(context, HogeActivity.class); startActivity(intent);
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent);
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent); String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0);
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent); String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0); w ͍ΖΜͳը໘ʹఆ͕ग़ͯདྷΔ
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent); String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0); w ͍ΖΜͳը໘ʹఆ͕ग़ͯདྷΔ w มΛ٧ΊΕͯίϯύΠϧΤϥʔग़ͳ͍
TUBUJDNFUIPE static void startActivity(Context context, String name, int age) {
Intent intent = new Intent(context, HogeActivity.class); intent.putExtra(KEY_NAME, "Takashi"); intent.putExtra(KEY_AGE, 30); context.startActivity(intent); } String name = getIntent().getStringExtra(KEY_NAME); int age = getIntent().getIntExtra(KEY_AGE, 0);
ͦ͏ͩɺࣗಈੜ͠Α͏
(SFOBEF IUUQTHJUIVCDPNLPCBLFJHSFOBEF
6TBHF @Navigator public class DetailActivity extends AppCompatActivity { // Required
params @Extra String name; // Optional params @Extra @Optional int age; ... }
6TBHF startActivity(new DetailActivityNavigator("Takashi") .age(30) .flags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) .build(context);
6TBHF @Navigator public class DetailActivity extends AppCompatActivity { ... @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Inject fields DetailActivityNavigator.inject(this, getIntent()); } }
4FWFSBMDPOTUSVDUPST @Navigator({ "foo,bar1", "foo,bar2" }) public class DetailActivity extends AppCompatActivity
{ @Extra String foo; @Extra int bar1; @Extra long bar2; ... }
4FWFSBMDPOTUSVDUPST startActivity(new DetailActivityNavigator(foo, bar1) .build(context)); startActivity(new DetailActivityNavigator(foo, bar2) .build(context));
8PSLXJUI1BSDFMFS @Navigator public class DetailActivity extends AppCompatActivity { // Use
parcelable entity as field @Extra User user; ... }
8PSLXJUI1BSDFMFS startActivity(new DetailActivityNavigator(new User()) .build(context));
None