Slide 1

Slide 1 text

4RVBSF
 'SBHNFOU΍ΊΔͬͯΑ OJOKJOLVO

Slide 2

Slide 2 text

ʲ຋༁ʳ"OESPJE'SBHNFOU΁ͷ
 ൓ର੠໌ w "EWPDBUJOH"HBJOTU"OESPJE'SBHNFOUT w 4RVBSF͕'SBHNFOUΛ΍Ίͨ࿩ w ษڧ͕ͯΒ຋༁ͨ͠ͷͰɺղઆ͠·͢ w !IPUDIFNJ͞Μʹ຋༁νΣοΫͯ͠௖͖·ͨ͠ IUUQOJOKJOLVOIBUFOBCMPHDPNFOUSZ

Slide 3

Slide 3 text

'SBHNFOUͷ໰୊఺ w ϥΠϑαΠΫϧ͕ෳࡶ w σόοά͕೉͍͠ w 7JFXͱϏδωεϩδοΫͷ෼཭͕ͮ͠Β͍ w ࠶ੜ੒͕ࠇຐज़

Slide 4

Slide 4 text

ϥΠϑαΠΫϧ͕ෳࡶ w "DUJWJUZ͔Βड͚ܧ͍ͩϥΠϑαΠΫϧ w "DUJWJUZͱ࿈ܞ͢ΔҝͷϥΠϑαΠΫϧ w 'SBHNFOU5SBOTBDUJPOͱ࿈ܞ͢ΔͨΊ ͷϥΠϑαΠΫϧ

Slide 5

Slide 5 text

σόοάͷ೉͠͞ w ελοΫΛ௥͍ͬͯ͘ͱ'SBHNFOU.BOBHFS*NQM ʹͿ͔ͭͬͯࢮ͵

Slide 6

Slide 6 text

7JFX$POUSPMMFSͨΓಘΔ͔ w 'SBHNFOU͸7JFXʹؔ͢ΔϩδοΫ΋͍ͩͿ࣋ͬͯ ͍Δ w ϏδωεϩδοΫͱ྆ํࠞࡏͯ͠͠·͏

Slide 7

Slide 7 text

'SBHNFOU5SBOTBDUJPO w DPNNJU͕ඇಉظ w ϝΠϯεϨουͷϋϯυϥΩϡʔͷ͋ͱͰ·ͱΊͯ ࣮ߦ͞ΕΔ w ͙͢ʹ݁ՌΛ࢖͍͍ͨͳΒ FYFDVUF1FOEJOH5SBOTBDUJPOT

Slide 8

Slide 8 text

'SBHNFOUΛੜ੒͢Δຐ๏ w 'SBHNFOU͸ϦϑϨΫγϣϯΛ࢖ͬͯ࠶ੜ੒͞ΕΔ w ಗ໊ΫϥεͰ'SBHNFOUΛ࡞Δͱɺ0VUFS$MBTTͷ ࢀর͕ͳͯ͘࠶ੜ੒࣌ʹࢮ͵ w +BWBͷϥΠϑαΠΫϧͱ'SBHNFOUͷϥΠϑαΠΫ ϧ͕ϛεϚον DialogFragment dialogFragment = new DialogFragment() { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { ... } }; dialogFragment.show(fragmentManager, tag);

Slide 9

Slide 9 text

ʢิ଍ʣ'SBHNFOUΛੜ੒͢Δຐ๏ w -JTUFOFS΋อ࣋Ͱ͖ͳ͍ w ਌ͱ௨৴͠Α͏ͱࢥͬͨΒɺ਌ʹ-JTUFOFSΛ࣮૷͢ Δඞཁ͕͋Δ w 'SBHNFOU͔Β"DUJWJUZʹίʔϧόοΫ͢Δํ๏ IUUQZBO[NCMPHTQPUKQGSBHNFOUBDUJWJUZIUNM

Slide 10

Slide 10 text

public class MainFragment extends Fragment { public interface OnOkBtnClickListener { public void onOkClicked(); } private OnOkBtnClickListener mListener; public void setOnOkBtnClickListener(OnOkBtnClickListener l) { mListener = l; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Button okBtn = new Button(inflater.getContext()); okBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mListener != null) { mListener.onOkClicked(); } } }); return okBtn; } } ࠶ੜ੒࣌ʹ-JTUFOFS͕ফ͑Δ IUUQZBO[NCMPHTQPUKQGSBHNFOUBDUJWJUZIUNM

Slide 11

Slide 11 text

public class MainFragment2 extends Fragment { public interface OnOkBtnClickListener { public void onOkClicked(); } private OnOkBtnClickListener mListener; @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof OnOkBtnClickListener == false) { throw new ClassCastException("activity ͕ OnOkBtnClickListener Λ࣮૷͍ͯ͠·ͤΜ."); } mListener = ((OnOkBtnClickListener) activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Button okBtn = new Button(inflater.getContext()); okBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { mListener.onOkClicked(); } } }); return okBtn; } }

Slide 12

Slide 12 text

'SBHNFOU͔ΒֶΜͩ͜ͱ w ୯Ұͷ"DUJWJUZ w ը໘ຖʹ"DUJWJUZΛ෼͚Δඞཁ͸ແ͍ w ΞχϝʔγϣϯͱϥΠϑαΠΫϧ͕؆୯ʹͳΔ

Slide 13

Slide 13 text

'SBHNFOU͔ΒֶΜͩ͜ͱ w όοΫελοΫ͸"DUJWJUZಛ༗ͷ֓೦Ͱ͸ͳ͍ w "DUJWJUZͷதʹ΋࣮૷Ͱ͖Δ

Slide 14

Slide 14 text

'SBHNFOU͔ΒֶΜͩ͜ͱ w ඞཁͳ΋ͷ͸શ෦ॳΊ͔Βἧ͍ͬͯͨ w "DUJWJUZ 7JFX -BZPVU*OqBUPS

Slide 15

Slide 15 text

ΧελϜϏϡʔ w $POUBJOFSͷಋೖ w ຕͷը໘Λ7JFXͰදݱ͢Δ w 7JFXPS-BZPVUͷαϒΫϥε w 7JFXͱͯ͠ͷ໾ׂόοΫૢ࡞ͷ؅ཧ

Slide 16

Slide 16 text

public class DualPaneContainer extends LinearLayout implements Container { private MyDetailView detailView; ! public DualPaneContainer(Context context, AttributeSet attrs) { super(context, attrs); } ! @Override protected void onFinishInflate() { super.onFinishInflate(); detailView = (MyDetailView) getChildAt(1); } ! public boolean onBackPressed() { return false; } ! @Override public void showItem(String item) { detailView.setItem(item); } }

Slide 17

Slide 17 text

public class MainActivity extends Activity { private Container container; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); container = (Container) findViewById(R.id.container); } ! public Container getContainer() { return container; } ! @Override public void onBackPressed() { boolean handled = container.onBackPressed(); if (!handled) { finish(); } } }

Slide 18

Slide 18 text

7JFXͱ1SFTFOUFS w ϏδωεϩδοΫͱ$POUSPMMFSͷ෼཭ w 1SFTFOUFS w .PEFMΛૢ࡞͢Δ w 7JFXΛૢ࡞͢Δ

Slide 19

Slide 19 text

ʢิ଍ʣ.71ύλʔϯ w .7$ͱͷҧ͍ w $POUSPMMFS͕ϢʔβʔೖྗΛड͚ͱΒͳ͍ w ड͚ͱΔͷ͸7JFX

Slide 20

Slide 20 text

public class MyDetailView extends LinearLayout { TextView textView; DetailPresenter presenter; ! public MyDetailView(Context context, AttributeSet attrs) { super(context, attrs); presenter = new DetailPresenter(); } ! @Override protected void onFinishInflate() { super.onFinishInflate(); presenter.setView(this); textView = (TextView) findViewById(R.id.text); findViewById(R.id.button).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { presenter.buttonClicked(); } }); } ! public void setItem(String item) { textView.setText(item); } }

Slide 21

Slide 21 text

class EditDiscountPresenter { // ... public void saveDiscount() { EditDiscountView view = getView(); String name = view.getName(); if (isBlank(name)) { view.showNameRequiredWarning(); return; } if (isNewDiscount()) { createNewDiscountAsync(name, view.getAmount(), view.isPercentage()); } else { updateNewDiscountAsync(discountId, name, view.getAmount(), view.isPercentage()); } close(); } }

Slide 22

Slide 22 text

OJOKJOLVOࢲݟ w "DUJWJUZͷܽؕʢͱ͍͏͔χʔζʹ߹͍ͬͯͳ͔ͬ ͨͱ͜Ζʣ w "DUJWJUZؒͷૄ݁߹ઃܭ w ը໘લఏ

Slide 23

Slide 23 text

OJOKJOLVOࢲݟ w "DUJWJUZͷܽ఺Λิ׬͢ΔͨΊͷ'SBHNFOU w "DUJWJUZͱͷ੔߹ੑΛऔΖ͏ͱ͗ͯ͢͠ઃܭ͕ෳ ࡶʹͳͬͯ͠·͍ͬͯΔ w 4RVBSF͸੔߹ੑΛࣺͯͯɺಠࣗͷεςʔτϑϧੈ քΛߏங͢ΔΞϓϩʔν

Slide 24

Slide 24 text

OJOKJOLVOࢲݟ w ϖʔδભҠ͢Δ8FCΞϓϦͱ4JOHMF1BHF "QQMJDBUJPOͷؔ܎ʹࣅͯΔ w ͳͷͰࢀߟʹͳΔ͜ͱ΋͋Δ͔΋

Slide 25

Slide 25 text

OJOKJOLVOࢲݟ w ฐࣾͰ͸'SBHNFOU͸ࣺͯͳ͍ w ಠࣗͰੈք؍Λ࡞Δ༨༟͸ͳ͍ w ͔͠͠'SBHNFOUͷਏ͞͸ೝ͓ࣝͯ͘͠΂͖ͩͱࢥ ͏

Slide 26

Slide 26 text

ձ৔σΟεΧογϣϯ w #BDLTUBDLʹ٧Έ͍ͨͱ͖͚ͩ'SBHNFOUΛ࢖͏ύ λʔϯΛࢼ͍ͯ͠Δํ͕͍Βͬ͠Όͬͨ w $VTUPN7JFXΛ΋ͬͱ࢖͏Α͏ʹ͢Ε͹'SBHNFOU ґଘ͸ݮΒͤΔ w 'SBHNFOUʹԿͰ΋ॻ͘ͷ͸ԿʹͤΑΞϯνύλʔ ϯ w 1SFTFOUFS͸'SBHNFOUΛ࢖͍ͬͯͯ΋༗༻ͦ͏

Slide 27

Slide 27 text

ձ৔σΟεΧογϣϯ w Ͱ͖Δ͚ͩ"DUJWJUZ͚ͩͰ࡞Δ೿ͷํ΋ w "DUJWJUZʹ͍ͭͯ͸͋·Γ΢έ͕ྑ͘ͳ͔ͬͨ

Slide 28

Slide 28 text

ձ৔σΟεΧογϣϯ w 'SBHNFOUͷਏ͞ʹ͍ͭͯ͸݁ߏίϯηϯαε͕औ Εͨͱࢥ͏ w ͦͷลΓΛཧղ্ͨ͠Ͱ࢖͍͖ͬͯ·͠ΐ͏