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
Grenade - Type safe intent buidler
Search
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
AI 1st でエンタープライズ SaaS を立ち上げる / AI 1st Enterprise SaaS
kobakei
1
270
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
2.8k
今日から始める依存性の注入 / 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.6k
開発者が知っておきたい通知の歴史
kobakei
9
7.9k
Other Decks in Programming
See All in Programming
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
670
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
170
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
130
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
520
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
230
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
460
共通化で考えるべきは、実装より公開する型だった
codeegg
0
260
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
110
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
150
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
200
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Google's AI Overviews - The New Search
badams
0
1.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
290
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
The untapped power of vector embeddings
frankvandijk
2
1.8k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
180
Git: the NoSQL Database
bkeepers
PRO
432
67k
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