Save 37% off PRO during our Black Friday Sale! »

pixiv SUMMER BOOT CAMP 2015 講義資料

pixiv SUMMER BOOT CAMP 2015 講義資料

Androidのはなしをしました

14e66169255d6c801c0f30463a354954?s=128

Keisuke SASAKI

September 24, 2015
Tweet

Transcript

  1. Androidのはなし るーく@RooandQoo

  2. About me 佐々木 佳祐@るーく 社歴2(4)年目 アプリ@マンガプロジェクト インターネットで二児の父をしています

  3. pixiv マンガ

  4. pixiv マンガ ・(ほぼ)毎日届く編集部のオススメマンガ ・読みやすい縦読みビューワー ・pixivコミックの連載も読めちゃう ・無料!!!!!!!!!!!!

  5. pixiv マンガ Android / iOS

  6. pixiv マンガ このアプリを つくる上での テクニックとかを 紹介していきます

  7. º iOSのみなさんゴメンナサイ…。

  8. Activityはなるべくスリムにする

  9. 画面を構成する基本要素 Activity Fragment (Custom)View

  10. Activity

  11. Fragment

  12. Fragment

  13. (Custom)View

  14. (Custom)View

  15. (Custom)View

  16. その気になればActivity1つでなんでもできる

  17. その気になればActivity1つでなんでもできる なんでもは言いすぎたかも

  18. 値の処理 バリデーション アニメーション ネットワーク処理 DB操作 メニュー 画面回転の対応 Intentの処理 Fragment管理 KeyEvent

    戻るボタン テーマの設定 他の画面から呼び出される etcetc…
  19. 全部やらせたら当然太る

  20. 肥大化したクラスはメンテしたくない

  21. Activity, Fragment, View 得意分野がそれぞれ異なるので 任せることが大事

  22. 特にActivityは Activityにしかできないことを やらせる方が良い

  23. 値の処理 バリデーション アニメーション ネットワーク処理 DB操作 メニュー 画面回転の対応 Intentの処理 Fragment管理 KeyEvent

    戻るボタン テーマの設定 他の画面から呼び出される etcetc…
  24. メニュー Intentの処理 Fragment管理 テーマの設定 他の画面から呼び出される

  25. FragmentとViewは 何をすべきか?

  26. ・Viewの集合をユーザに見せる Fragment 定義されたレイアウトを表示する 画面を切り替える

  27. ・ライフサイクルに応じた処理 Fragment Activityにくっついた、離れた Viewが生まれた、死んだ 画面が回転された

  28. ・ネットワーク処理 Fragment リクエストを投げる 結果を受け取って何かする

  29. ・DB, ファイルの操作 Fragment

  30. ・画面パーツとして利用する (Custom)View パーツにユーザが操作を加えたとき なんらかの値が変わる場合 CustomViewが処理する

  31. CustomViewの使用例

  32. pixivマンガのトップ

  33. CustomView

  34. CustomView ここが 変わる

  35. CustomView ちなみに これも CustomView

  36. Activity(この場合はFragment)でもできる 1. GridViewとTextViewをFragment内で定義 2. ジャンル一覧のGridViewにListenerを設定 3. Listener内のonItemSelectedでTextViewの中身を更新

  37. 処理をViewに譲渡することで 見通しがよくなる Fragmentから GenreLabelView.setGenreTextView(“ジャンル名”) を呼ぶだけ!!

  38. CustomViewのつくりかた 1. CustomViewとして使うもののレイアウトファイルをつくる 2. なんちゃらLayoutを継承したクラスをつくる 3. コンストラクタを書く 4. あるActivity(Fragment)のレイアウトに埋め込む 5.

    または、使いたい場面で直接インスタンスを作って使う
  39. レイアウト埋め込み型

  40. インスタンスつくる型

  41. たのしいCustomViewライフを!!

  42. Fragmentは闇が深い

  43. Fragmentは人類には早すぎたんや… @choco_biimu

  44. とはいえ使わないわけにもいかない

  45. 用法・用量を守ろう 1. コンストラクタのつくりかたを守る 2. 初期値の設定はset/getArguments()で 3. startActivityはあんましないほうが良い 4. 特にstartActivityForResult()は怪しい 5.

    などなど ググるといい感じの資料が出てくる
  46. 用法・用量を守ろう 1. コンストラクタのつくりかたを守る 2. 初期値の設定はset/getArguments()で 3. startActivityはあんましないほうが良い 4. 特にstartActivityForResult()は怪しい 5.

    などなど というかこの資料もリファレンスがあるので あとで教えます
  47. 細かいこといろいろ

  48. 画面遷移はcreateIntent()で! Activity1 Activity2

  49. よくあるパターン Activity1.startActivity(this, Activity2.class)

  50. よくあるパターン Intent intent = new Intent(this, Activity2.class) intent.putExtra(“hoge”, 1) startActivity(intent)

    遷移先のことを常に意識しないといけない
  51. createIntent public static Intent createIntent(Activity fromactivity) { Intent intent =

    new Intent(fromActivity, Activity2.class); return intent; } 呼び出される側(Activity2)
  52. createIntent startActivity(Activity2.createIntent(this)) 呼び出す側(Activity1)

  53. createIntent public static Intent createIntent(Activity fromactivity, int a) { Intent

    intent = new Intent(fromActivity, Activity2.class); intent.putExtra(“hoge”, a) return intent; } 値を渡したいとき
  54. createIntent startActivity(Activity2.createIntent(this, 1)) 値を渡したいとき キーの名前を意識しなくて済む

  55. List(Grid)Viewを使うときは ViewHolderを実装する スクロール した時に Viewを 使いまわす

  56. List(Grid)Viewを使うときは ViewHolderを実装する DataBindingで 置き換えられそう スクロール した時に Viewを 使いまわす

  57. Activityはなるべくスリムに まとめ Fragment, CustomViewをうまく使おう Fragmentを使うときはルールを守ろう 画面遷移はcreateIntent()で DataBindingすごそう

  58. 参考資料 IUUQXXXTMJEFTIBSFOFUZBO[NESPJELBJHJZBO[N "DUJWJUZ 'SBHNFOU $VTUPN7JFXͷ࢖͍෼͚Ϛονϣͳ "DUJWJUZʹ͞ΑͳΒ͢Δํ๏

  59. 参考資料 IUUQHGYIBUFOBCMPHDPNFOUSZ "OESPJE%BUB#JOEJOHಋೖͷୈҰา #VUUFS,OJGF 7JFX)PMEFSύλʔϯΛஔ͖׵͑Δ