äœåãã®èšäºãhabrahabrã®ã¿ã®çŽç²ãªã³ãŒãã«æ§ããããŠããŸãã èªåã§æžããããšæã£ãããšã¯ãªãã£ãã§ãããã ããããäŒç€ŸããœãããŠã§ã¢éçºãç¹ã«Androidåãã®éçºã«ãã£ãªã¢ãçµã³ä»ããã人åãã®ã³ãŒã¹ãå®æœããåŸãç§ã®æèŠã¯å€ãããŸããã
ãã®èšäºã¯ãå€å
žãRobert K. MartinïŒClean Codeãã®ãã³ãã«åºã¥ããŠããŸãã ç§ã¯ããããããåŠçã®éã§åé¡ã®åœ¢ã§æãé »ç¹ã«ééãããã®ãéžæããŸããã ãããã®ãã³ãã¯ãåçšAndroidã¢ããªã±ãŒã·ã§ã³ã®éçºã«ãããç§ã®çµéšã«åºã¥ããŠæžãããŠããŸãã ãããã£ãŠã以äžã®ãã³ãã¯ãã¹ãŠã®Androidãããžã§ã¯ãã§æ©èœããããã§ã¯ãªããä»ã®ã·ã¹ãã ã«ã€ããŠã¯è©±ããŠããªãã
ãã³ãã«ã¯ãã»ãšãã©å¿
èŠãªãã³ãŒãäŸãæäŸãããŠããŸãã å¥åŠãªããšã«ãã»ãšãã©ã®åŠçã«ã¯åãééãããããŸããã ãã¹ãŠã®ã³ãŒãäŸãèæ¡ãããŠãããå®éã®ã³ãŒããšã®äžèŽã¯ã©ã³ãã ã§ãã
äžè¬çãªãã³ã
1.ã³ãŒãã¯èªã¿ããããç解å¯èœã§ãæçœã§ãªããã°ãªããŸããã
ããã°ã©ãã¯ãæ°ããã³ãŒããæžãã®ã§ã¯ãªããæžããã³ãŒããèªãã§åæããããšã«ã»ãšãã©ã®æéãè²»ãããŸãã ã³ãŒãã¯èªã¿ããããç解ãããããäºæž¬å¯èœãªåäœã§ããããšãéèŠã§ãã ããã«ãããååãšåã³ãŒãã®æ©èœãç解ããããã«æå°éã®æéãè²»ããããšãã§ããŸãã äºæž¬å¯èœãªåäœãåããæ確ãªã³ãŒãã¯ãã³ãŒãã®äœæè
以å€ãå€æŽãè¡ãéã®ãšã©ãŒã®å¯èœæ§ãæžãããŸãã
2.ã³ãŒããæžããšãã¯ããããžã§ã¯ãããŒã ãæ¡çšããJavaã³ãŒãèŠçŽãŸãã¯ãã®ä»ã®ä»æ§ãéµå®ããå¿
èŠããããŸãã
ä»æ§ã¯ãæ¬ã®ããã¹ãã®ã«ãŒã«ãšæ¯èŒã§ããŸãã å段èœãããã¹ãã®ãã©ã³ãããµã€ãºãè²ã§åºå¥ãããæ¬ãèªã¿ãããªã人ã¯ã»ãšãã©ããªããšæããŸãã ãããã£ãŠãã³ãŒãã䜿çšãããšãåãã¹ã¿ã€ã«ã§ã³ãŒããèªãã®ãã¯ããã«ç°¡åã«ãªããŸãã
ãåå
1.ã¯ã©ã¹ãé¢æ°ãå€æ°ãããã³ãã©ã¡ãŒã¿ãŒã®ååã¯ããããã«å®çŸ©ãããŠããæå³ãäŒããå¿
èŠããããŸãã
ããªãæçœãªã¢ããã€ã¹ã§ãããåžžã«ããã«åŸããšã¯éããŸããã ããã§ã¯ãäŸãšããŠãæ¬ã®ç®æ¬¡ãåŒçšã§ããŸãããã¹ãŠã®ç« ãåã«ãç« ããšåŒã°ããå Žåããã®æ¬è³ªãç解ã§ããªãã ã¯ã©ã¹ãšé¢æ°ã®ååã¯ãå®è£
ã®è©³çŽ°ã«é£ã³èŸŒãããšãªãããããã®ç®çãå ±åããå¿
èŠããããŸãã
ã¯ã©ã¹MyActivity, CustomView, MyAdapter
ã¯1ã€ã ãèšã£ãŠããŸããããã¯Android SDKã®äžéšã§ã¯ãªããšããããšã§ãã SecondActivity
ã¯ãããã¯Android SDKã®äžéšã§ã¯ãªãããããžã§ã¯ãã«ã¯å¥ã®ã¢ã¯ãã£ããã£ããããŸãããäºå®ã¯ãããŸãã=ïŒ
ã¯ã©ã¹ã«æ£ããååãä»ããŸãïŒ MainActivity, FoodsActivity, FoodCartActivity, PhoneInputView
ã MainActivity
æããã«ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ç»é¢ã FoodsActivity
補åã®ãªã¹ããå«ãç»é¢ã PhoneInputView
é»è©±çªå·ãå
¥åããããã®ã³ã³ããŒãã³ãã
次ã®å€æ°åã¯åœ¹ã«ç«ãããåœåèŠåã«éåããŠããŸãã
private TextView m_textview_1; private TextView m_textview_2; private TextView m_textview_3;
ã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãšåæ§ïŒ
public Policy(int imgId,int imgId2)
2.ãããªãã¯ã¯ã©ã¹ãšãã¡ã€ã«ã®ååã¯äžèŽããå¿
èŠããããŸãã
次ã®ã¯ã©ã¹ããããŸã
public class ProductsActivity extends AppCompatActivity { ... }
ãã¡ã€ã«ã®ååã¯ãproducts_Activity.javaãã§ãã
ããã¯æ£ãããããŸããã ãããªãã¯ã¯ã©ã¹ã®ååãšJavaãã¡ã€ã«ã¯äžèŽããå¿
èŠããããŸãã
3.ååã«ã¯ãã©ãã³ã¢ã«ãã¡ãããã®æåã®ã¿ã䜿çšããæ°åãã¢ã³ããŒã¹ã³ã¢ããã€ãã³ã¯äœ¿çšããªãã§ãã ããã äŸå€ã¯ãæšæºïŒGOSTãISOïŒããã®ååãå®æ°åã®åèªãåºåãããã®äžç·ã§ãã
äžèšã®äŸïŒ m_textview_1
ã å€ãã®å Žåã lastName
ã§ã¯ãªãuserName2
æžã蟌ãŸãuserName2
ãããã¯æ£ãããããŸããã
4.å°æåã®ãLããšãOããããŒã«ã«å€æ°ã®ååãšããŠäœ¿çšããå¿
èŠã¯ãããŸããã ã1ããã0ããšåºå¥ããããšã¯å°é£ã§ãã
äžèªç¶ãªäŸã§ãããç§ã®ç·Žç¿ã§äŒŒããããªãã®ã«åºäŒããŸãã
private void s(int a[]) { for (int l = 0; l < a.length; l++) { for (int O = a.length - 1; O > l; O--) { if (a[O - 1] > a[O]) { int o = a[0 - 1]; a[O - 1] = a[O]; a[O] = o; } } } }
ãã®ããã«ãœãŒãé¢æ°ã«ã¯1ã€ã®ãšã©ãŒããããŸããæ°ç§ã§èŠã€ããããšãã§ããŸã=ïŒïŒ
ãã®ãããªã³ãŒãã¯èªã¿ã«ãããæžããšãã¯æ€çŽ¢ã«éåžžã«é·ãæéããããå¯èœæ§ããããã¹ãç¯ããããã§ãã
5.ååã®æ¥å°ŸèŸã«ã¿ã€ããæå®ããå¿
èŠã¯ãããŸããã
accountList
代ããã«ã accountList
ãèšè¿°ããã ãã§ãã ããã«ãããå€æ°èªäœã®ååãå€æŽããã«ããã€ã§ãå€æ°ã®ã¿ã€ããå€æŽã§ããŸãã
ããã«æªãã®ã¯ã nameString, ageFloat
ã§ãã
äŸå€ã¯ãã¢ã¯ãã£ããã£ããã©ã°ã¡ã³ãããã¥ãŒããŠãªãªã©ã®Android SDKã¯ã©ã¹ã®çžç¶äººã§ãã NewsSynsServiceãšããååã§ã¯ ãã¯ã©ã¹ãããµãŒãã¹ãã§ããããã¥ãŒã¹ã®åæãæ
åœããŠããããšãããã«ããããŸãã nameView, photoView
ã®view
æ¥å°ŸèŸã䜿çšããŠã nameView, photoView
ã䜿çšãããšãã¬ã€ã¢ãŠãå€æ°ãä»ã®ã¬ã€ã¢ãŠãå€æ°ãšç°¡åã«åºå¥ã§ããŸãã ãã¥ãŒåã¯éåžžãåè©ã§å§ãŸããŸãã ãã ãããã¿ã³åã¯ãåè©ïŒbuyButtonã§å§ããã®ãæé©ã§ãã
6.ååã«ã¯ãæ°åŠã®çšèªãã¢ã«ãŽãªãºã ã®ååãèšèšãã¿ãŒã³ãªã©ãå«ããããšãã§ããŸãã
ã³ãŒãã®äœè
ã§ã¯ãªããååBitmapFactory
èŠããšããã®ã¯ã©ã¹ã®æå³ãããã«ç解ãããŸãã
7.åœåæã«ãã¬ãã£ãã¯ã¹ã¯äžèŠã§ãã
m_user, mUser
代ããã«m_user, mUser
åã«user
ãšèšè¿°ããuser
ã ææ°ã®IDEã®éçãã£ãŒã«ãã«sãã¬ãã£ãã¯ã¹ãæå®ããå¿
èŠã¯ãããŸããã
Android SDKã®ãœãŒã¹ã³ãŒãã¯ãæåã®ããŒãžã§ã³ã®äœæãšã³ãŒãããŒã¹ã®ä»æ¥ãžã®ç¶æ¿ã®å¶éã®ãããããã§ã¯ã€ã³ãžã±ãŒã¿ãŒã§ã¯ãããŸããã
public static final String s_default_name = "name";
s_ã¯ãéçãã£ãŒã«ãã®ååã®å
é ã§ã¯åœ¹ã«ç«ã¡ãŸãã ã ããã«ãå®æ°ã®ååã¯å€§æåã§æžãå¿
èŠããããŸãã
public static final String DEFAULT_NAME = "name";
8.ã¯ã©ã¹åã«ã¯åè©ã䜿çšããå¿
èŠããããŸãã
ã¯ã©ã¹ã¯å®äžçã®ãªããžã§ã¯ãã®ãããªãã®ã§ãã ãããã£ãŠãååã«AccountsFragment, User, Car, CarModel
åè©ã䜿çšããå¿
èŠããããŸãã
ã¯ã©ã¹Manager, Processor, Data, Info
ãåŒã³åºãå¿
èŠã¯ãããŸããã ãããã¯äžè¬çãããŸãã 2ã4ã¯ãŒãã®ã¯ã©ã¹åã¯ãåãªãData
ãããåªããŠããŸãã
9.ã¯ã©ã¹åã¯å€§æåã§å§ããå¿
èŠããããŸãã
åèªã¯ã¢ã³ããŒã¹ã³ã¢ã§åºåããªãã§ãã ããã GoodsFragment, BaseFragment
è¡šèšã«åŸãå¿
èŠããããŸãïŒ GoodsFragment, BaseFragment
10.æŠå¿µããšã«1ã€ã®åèªã䜿çšããŸãã
1ã€ã®ã¯ã©ã¹fetch, retrieve, get
ã䜿çšãããšæ··ä¹±ããŸãã ã¯ã©ã¹ãCustomer
ãšåŒã°ããå Žåããã®åã®é¢æ°ã®ã¯ã©ã¹å€æ°ãšãã©ã¡ãŒã¿ãŒã®ååã¯user
ã§ã¯ãªãcustomer
ãšåŒã°ããã¹ãã§ãã
æ©èœ
1.é¢æ°ã¯1ã€ã®ãæäœãã®ã¿ãå®è¡ããå¿
èŠããããŸãã 圌女ã¯ãããããŸããããªããã°ãªããŸããã ãããŠåœŒå¥³ã¯ä»ã«äœãããã¹ãã§ã¯ãããŸããã
ãæäœããšã¯ã1ã€ã®æ°åŠçãªæäœãå¥ã®é¢æ°ã®åŒã³åºãã§ã¯ãªããåãæœè±¡ã¬ãã«ã®ã¢ã¯ã·ã§ã³ãæå³ããŸãã é¢æ°ãè€æ°ã®æäœãå®è¡ããããšã確èªããã«ã¯ããã®é¢æ°ããå¥ã®é¢æ°ãæœåºããå¿
èŠããããŸãã é¢æ°ãæœåºããŠãã³ãŒãã®åçŽãªåé
眮ããåŸãããªãå Žåãé¢æ°ãããã«å£ããŠãæå³ããããŸãã
ããšãã°ã ProductsAdapter
ã¯ã©ã¹ã®setProducts
é¢æ°ããããŸãã
public class ProductsAdapter extends RecyclerView.Adapter<ProductHolder> { public void setProducts(List<Product> newProducts) { products.clear(); for (Product newProduct : newProducts) { if (!TextUtils.isEmpty(newProduct.getName())) { products.add(newProduct); } } notifyDataSetChanged(); }
é¢æ°å
ã«ã¯ã1ïŒ newProducts
ãã£ã«ã¿ãªã³ã°ã2ïŒ products
ãžã®æ°ããå€ã®ã¯ãªãŒãã³ã°ãšæ¿å
¥ã3ïŒã¢ããã¿ãŒnotifyDataSetChanged
æŽæ°ã®3ã€ã®äž»èŠãªæäœããããŸãã
newProductsèŠçŽ ã®ãã£ã«ã¿ãªã³ã°ã¯ãå¥ã®ã¡ãœããã§ãããã«ã¯ã¯ã©ã¹ã®å¥ã®ã¡ãœããïŒãã¬ãŒã³ã¿ãŒãªã©ïŒã§è¡ãå¿
èŠããããŸãã ãã§ã«ãã£ã«ã¿ãŒåŠçãããããŒã¿ã¯ProductsAdapter
éãããŸãã
次ã®ããã«ã³ãŒããããçŽãããšããå§ãããŸãã
public void setProducts(List<Product> newProducts) { products.clear(); products.addAll(newProducts); notifyDataSetChanged(); }
newProducts
ãã©ã¡ãŒã¿ãŒã«ã¯ãæ¢ã«ãã£ã«ã¿ãŒåŠçããã補åã®ãªã¹ããå«ãŸããŠããŸãã
ãŸãã java products.clear(); products.addAll(newProducts);
java products.clear(); products.addAll(newProducts);
å¥ã®æ©èœãè¿œå ããŸãããããã«ã¯ããŸãæå³ããããŸããã notifyDataSetChanged
ãDiffUtilã«çœ®ãæããããšããnotifyDataSetChanged
ããŸã ãããã«ããããªã¹ãå
ã®ã»ã«ãããå¹ççã«æŽæ°ã§ããŸãã
2.é¢æ°ã®ãµã€ãºã¯8ã10è¡ã«ããå¿
èŠããããŸãã
3ç»é¢ã®æ©èœã¯æ©èœã§ã¯ãªãã*****ã§ãã ãŸããé¢æ°ã®ãµã€ãºã8ã10è¡ã®ã³ãŒãã«å¶éããããšã«åžžã«æåãããšã¯éããŸãããããã®ããã«åªåããå¿
èŠããããŸãã æãããªçç±ã§äŸãæããŸããã
倧èŠæš¡ãªé¢æ°ã¯ãèªã¿åããå€æŽãããã³ãã¹ããå°é£ã§ãã 倧ããªé¢æ°ãå°ããªé¢æ°ã«åå²ãããšãå°ããªè©³çŽ°ãé ããããããã¡ã€ã³é¢æ°ã®æå³ãç解ãããããªããŸãã é¢æ°ã匷調衚瀺ããããšã«ãããã¡ã€ã³é¢æ°ã®ã³ãŒãã®éè€ã確èªããŠåãé€ãããšãã§ããŸãã
3.é¢æ°ã®æ¬äœã§ã¯ããã¹ãŠãåãæœè±¡ã¬ãã«ã«ããå¿
èŠããããŸãã
private void showArticelErrorIfNeed(Article article) { if (validateArticle(article)) { String errorMessage = "Article " + article.getName() + " is incorrect"; showArticleError(errorMessage); } else { hideArticleError(); } }
ããŒã«ã«å€æ°errorMessage
ã®å€ã®èšç®ã¯ãé¢æ°å
ã®æ®ãã®ã³ãŒããããæœè±¡åã®ã¬ãã«ãäœããªããŸãã ãããã£ãŠã java "Article " + article.getName() + " is incorrect"
ã³ãŒãjava "Article " + article.getName() + " is incorrect"
ãå¥ã®é¢æ°ã«å
¥ããæ¹java "Article " + article.getName() + " is incorrect"
é©åã§ãã
4.é¢æ°ã®ååãšæž¡ããããã©ã¡ãŒã¿ãŒã¯ãé¢æ°ãäœãããŠããããå ±åããå¿
èŠããããŸãã
ã³ãŒããããã¯ãå¥ã®é¢æ°ã«å²ãåœãŠãçç±ã¯ãã³ãŒããäœãããã®ãã説æããããšããé¡æãããããŸããã ãããè¡ãã«ã¯ãé©åãªé¢æ°åãšé¢æ°ãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠããããŸãã
public Product find(String a) { ⊠}
æ€çŽ¢ãè¡ããããã£ãŒã«ãã¯æ確ã§ã¯ãªããé¢æ°ã®å
¥åã«éä¿¡ãããŸãã
次ã®åœ¢åŒã§ãªã¡ã€ã¯ããããšããå§ãããŸãã
@Nullable public Product findProductById(@NonNull String id) { ⊠}
é¢æ°ã®ååã¯ã id
ãã£ãŒã«ãã«ããProduct
æ€çŽ¢ãããããšã瀺ããŠããŸãã ãã®é¢æ°ã¯ãå
¥åã§ãã«ä»¥å€ã®å€ãåãå
¥ããŸãã Product
èŠã€ãããªãå Žåããnullããè¿ãããŸãã
Robert C. Martinã¯ãé¢æ°åã®äžéšãšããŠãã©ã¡ãŒã¿ãŒã䜿çšããããšãæšå¥šããŠããŸãã
public void add(Product product) { ⊠}
é¢æ°åŒã³åºãã¯æ¬¡ã®ããã«ãªããŸãã
add(product);
ãããžã§ã¯ãã§ã¯ããã®ãããªæ¹æ³ãèŠãããšã¯ãããŸããã ãã®ã¡ãœããã䜿çšããã«ãã«ããŒã ãæžãããšããå§ãããŸãïŒ
public void addProduct(Product product){ ⊠}
5.é¢æ°åã¯åè©ã§å§ãŸãå¿
èŠããããŸãã é·ãååã¯ãæå³ã®ãªãçãååãããåªããŠããŸãã
public static void start(Context context) {...}
ååstart
ã¯ãé¢æ°ãäœãéå§ãããã瀺ããŠããŸããã 身äœãèŠãã ãã§ãé¢æ°ãã¢ã¯ãã£ããã£ãéãããšãæããã«ãªããŸãã
ãããŠãé¢æ°ã®ç®çã¯ãã§ã«ååã§æ確ã«ãªã£ãŠããã¯ãã§ãã
public static Intent makeIntent(Context context) {...}
6.ãã©ã°é¢æ°ïŒããŒã«å€ïŒãåŒæ°ã«æž¡ã代ããã«ãé¢æ°ã2ã€ã®é¢æ°ã«åå²ããããšããå§ãããŸã
å€ãã®å Žåããã®ãã©ã°ã«ããââãå®è¡ããžãã¯ãåå²ãããšãã«ããã©ã°ã®å€ã«å¿ããŠé¢æ°ã®ãµã€ãºã倧ãããªããŸãã ãã®ãããªå Žåããã®é¢æ°ã2ã€ã«åå²ããããšãæ€èšããå¿
èŠããããŸãã æž¡ããããã©ã°ã«å¿ããé¢æ°ã®ç°ãªãåäœã¯ãå¿
ãããæããã§ã¯ãããŸããã
7.éè€ããã³ãŒãã¯å¥ã®æ©èœã§åãåºãå¿
èŠããããŸãã
lightButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { titleView.setTextAppearance(R.style.lightText); descriptionView.setTextAppearance(R.style.lightText); titleView.setBackgroundResource(R.color.lightBack); descriptionView.setBackgroundResource(R.color.lightBack); } }); (... ) greyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { titleView.setTextAppearance(R.style.greyText); descriptionView.setTextAppearance(R.style.greyText); titleView.setBackgroundResource(R.color.greyBack); descriptionView.setBackgroundResource(R.color.greyBack); } });
setOnClickListenerå
ã®ã³ãŒãã¯ãã¹ã¿ã€ã«ã®ã¿ãç°ãªããŸãã ãã®ã³ãŒãã¯å¥ã®ã¡ãœããã«é
眮ããå¿
èŠããããŸãã
private void changeStyle(@StyleRes int textSyleResource, @ColorRes int backgroundColorResource) { titleView.setTextAppearance(textSyleResource); descriptionView.setTextAppearance(textSyleResource); titleView.setBackgroundResource(colorResource); descriptionView.setBackgroundResource(RcolorResource); }
8.空ã®ãªããžã§ã¯ããè¿ãããšãã§ããå Žåã¯ããnullãé¢æ°ãæž¡ããªãã§ãã ããã
public List<Product> findProductsByType(String type) { if (TextUtils.isEmpty(type)) { return null; } List<Product> result = new ArrayList<>(); for (Product product : products) { if (product.getType().equals(type)) { result.add(product); } } return result; } : @NonNull public List<Product> findProductsByType(@NonNull String type) { if (TextUtils.isEmpty(type)) { return Collections.emptyList(); } List<Product> result = new ArrayList<>(); for (Product product : products) { if (product.getType().equals(type)) { result.add(product); } } return result; }
ããã«ãããNullPointerexceptionãšã©ãŒãåé¿ã§ããåŒã³åºãã®å Žæã§nullã®ãã§ãã¯ãèšè¿°ããå¿
èŠããªããªããŸãã
Kotlinã¯ãnullãæž¡ãããè¿ããšããæªãç¿æ
£ã解ãã®ã«åœ¹ç«ã¡ãŸããïŒ
æžåŒèšå®
1.ã¯ã©ã¹å
ã®ã³ãŒãã¯ãæ°èèšäºã®ããã«æœè±¡åã¬ãã«ã®éé ã§äžäžã«èªãå¿
èŠããããŸãã æåã¯ãããªãã¯é¢æ°ã次ã«ãã©ã€ããŒãé¢æ°ããããŸãã
ã¢ããã€ã¹ã®äž»ãªã¢ã€ãã¢ã¯ããã¡ã€ã«ãéããšãããã°ã©ããŒãäžãããã¡ã€ã«ã衚瀺ãå§ãããšããããšã§ãã æåã«ãã¹ãŠã®ãããªãã¯é¢æ°ãé
眮ãããšãã¯ã©ã¹ãªããžã§ã¯ãã䜿çšããåºæ¬æäœãã¯ã©ã¹ã®è²¬ä»»ãããã³ããã䜿çšã§ããå Žæãç解ãããããªããŸãã ãã®ãã³ãã¯ããããžã§ã¯ããã€ã³ã¿ãŒãã§ã€ã¹äžã«æ§ç¯ãããå Žåã«é©ããŠããŸãã
2.ãã¡ã€ã«ãåžžã«äžäžã«ç§»åããå¿
èŠããªãããã«ãé¢é£ããæŠå¿µ/æ©èœãè¿ãã«é
眮ããå¿
èŠããããŸãã ããé¢æ°ãå¥ã®é¢æ°ãåŒã³åºãå ŽåãåŒã³åºãããé¢æ°ã¯åŒã³åºãå¯èœãªé¢æ°ã®äžã«é
眮ããïŒå¯èœãªå ŽåïŒã空ã®æååã§åºåãããå¿
èŠããããŸãã
ãã®ã¢ããã€ã¹ã¯ãåã®ã¢ããã€ã¹ãšççŸããå ŽåããããŸãã ããŒã ã«åªå
çãªã¢ããã€ã¹ãéžæããå Žåã¯ããããžã§ã¯ãå
šäœãéããŠããã«åŸãå¿
èŠããããŸãã
3.ã³ãŒãã®é£ç¶ããåã°ã«ãŒãã¯ã1ã€ã®å®å
šãªæèãè¡šãå¿
èŠããããŸãã æèã¯ç©ºã®è¡ã䜿çšããŠã³ãŒãå
ã§äºãã«åé¢ãããŠããããã空ã®è¡ã䜿ããããªãã§ãã ãã
ãªã³ã¯ãããè¡ã®ã°ã«ãŒãã¯ãèšäºã®æ®µèœã®ãããªãã®ã§ãã èµ€ãç·ãŸãã¯ç©ºã®ç·ã䜿çšããŠã段èœãåºåããŸãã ãããã£ãŠãã³ãŒãã§ã¯ã空ã®è¡ã䜿çšããŠãæå³ã®ç°ãªãè¡ã®ã°ã«ãŒããåé¢ããå¿
èŠããããŸãã
4.ã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹å€æ°ãéçå®æ°ã¯ãã¹ãŠãã¯ã©ã¹ã®å
é ã«1ãæã«é
眮ããå¿
èŠããããŸãã
ã¯ã©ã¹ã®å
é ã§ããããªãã¯å®æ°ã宣èšããã次ã«ãã©ã€ããŒãå®æ°ã宣èšããããã®åŸãã©ã€ããŒãå€æ°ãç¶ããŸãã
æ£ããçºè¡šïŒ
public class ImagePickerActivity extends AppCompatActivity { public final static String KEY_CODE_HEX_COLOR = "hex_color"; public final static String KEY_CODE_PICKED_IMAGE = "picked_image"; private final static int REQUEST_CODE_GET_IMAGE = 2; private final int REQUEST_CODE_HEX_COLOR = 1; private Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) {
5.ã¹ããŒã¹ã䜿çšããŠãã³ãŒããèªã¿ãããããŸãã
- æŒç®èšå·ããªãã©ã³ãããåé¢ããæ°åŠæŒç®ã§ïŒ
int x = a + b;
- é¢æ°ãã©ã¡ãŒã¿ãŒã®åé¢ïŒ
private Article createNewArticle(String title, String description)
- æž¡ãããé¢æ°ãã©ã¡ãŒã¿ãŒïŒ
createNewArticle(title, description)
6.ãããžãã¯ãã³ããŒãã¹ããªã³ã°ãã¯å®æ°ã§ã¬ã³ããªã³ã°ããå¿
èŠããããŸã!!!
ããããæã人æ°ã®ããã¢ããã€ã¹ã§ãããããã§ãéåãç¶ããŠããŸãã
StringBuilder builder= new StringBuilder(); for (int i = days; i > 0; i /= 10) { builder.insert(0, i % 10); }
åé¡ã®ã¹ããŒãã¡ã³ããèªãã åŸãã³ãŒãã§ã10ããšããæ°åã䜿çšãããçç±ãç解ããŸããã ãã®æ°å€ãå®æ°ã«å
¥ããŠãæå³ã®ããååãä»ãããšããã§ãããã
æååã¯ãç¹ã«è€æ°ã®å Žæã§äœ¿çšãããå Žåãå®æ°ã«å
¥ãã䟡å€ããããŸãã
ã¯ã©ã¹
1.ã¯ã©ã¹ã«ã¯ã1ã€ã®ã責任ãã1ã€ã®å€æŽçç±ãå¿
èŠã§ãã
ããšãã°ãRecyclerView.Adapterã¯ã©ã¹ã®åå«ã¯ããã¥ãŒã®äœæãšããŒã¿ãžã®ãªã³ã¯ãæ
åœããå¿
èŠããããŸãã èŠçŽ ã®ãªã¹ãã®ãœãŒã/ãã£ã«ã¿ãŒã³ãŒããå«ããããšã¯ã§ããŸããã
å€ãã®å ŽåãRecyclerView.Adapterã¯ã©ã¹ã¯Activityãšå
±ã«ãã¡ã€ã«ã«è¿œå ãããŸãããããã¯æ£ãããããŸããã
2.空ã®ã¡ãœããããªããã芪ã¯ã©ã¹ããã®åŒã³åºãã¡ãœããã ããå¿
èŠã§ã
@Override protected void onStart() { super.onStart(); }
3.芪ã¡ãœãããåŒã³åºããã«äžéšã®ã¡ãœãããåå®çŸ©ããå Žåããããå®è¡ã§ããããšã確èªããŸãã
芪ã¯ã©ã¹ã®ãœãŒã¹ã³ãŒããããã¥ã¡ã³ããã芧ãã ããã ActivityãFragmentãViewã©ã€ããµã€ã¯ã«ã®åå®çŸ©ãããã¡ãœããã¯ãå¿
ã芪ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãå¿
èŠããããŸãã
ãªãŒããŒã©ã€ãæã«èŠªã¡ãœãããåŒã³åºãå¿
èŠãããããšã瀺ãã¢ãããŒã·ã§ã³@CallSuper
èŠåããããŸãã
ãã®ä»ã®ãã³ã
1. Android Studioã®ããŒã«ã䜿çšããŠãã³ãŒãã®å質ãæ¹åããŸãã
ã³ãŒãã«äžç·ãåŒããã匷調衚瀺ããããããšãäœããééã£ãŠããå¯èœæ§ããããŸãã Android Studioã«ã¯ãåé
眮ãåãã©ãŒããããã¡ãœããã®æœåºãã€ã³ã©ã€ã³ã¡ãœãããã³ãŒãã¢ãã©ã€ã¶ãŒã ãããããŒãªã©ã®ããŒã«ããããŸãã
2.åã¡ãœããã«ã³ã¡ã³ãããå¿
èŠã¯ãããŸãããã³ãŒãã¯èªå·±ææžåããå¿
èŠããããŸãã
ã³ã¡ã³ãã§ã¯ãã³ãŒãã®åäœã§ã¯ãªããæå³ãšçç±ã説æããå¿
èŠãããããšã«æ³šæããŠãã ããã ã³ã¡ã³ããäœæããã«ã¯ãã³ã¡ã³ããææ°ã®ç¶æ
ã«ä¿ã€è²¬ä»»ããããŸãã
3.ç·ãè²ããµã€ãºã¯ãªãœãŒã¹å
ã«ããå¿
èŠããããŸãïŒxmlïŒ
æžãå¿
èŠã¯ãããŸããïŒ
private static final String GREEN_BLUE = "#33c89b"; String.valueOf(" " + days + " ")
äŸå€ã¯ããã¹ãããã®ãã¡ã€ã«ãæš¡æ¬ãã©ã«ããŒã§ãã ãã®ãããªãã¡ã€ã«ã¯ããªãªãŒã¹ããŒãžã§ã³ã«å«ããã¹ãã§ã¯ãããŸããã
4.ã³ã³ããã¹ããRecyclerView.Adapterã«æž¡ãå¿
èŠã¯ãããŸããã ã³ã³ããã¹ãã¯ä»»æã®ãã¥ãŒããååŸã§ããŸãã RecyclerView.Adapterã®ã¯ãªãã¯ã¹ã«ãŒèŠçŽ ã¯ãã¯ãªãã¯åŠçã¡ãœããã®ãã¥ãŒãçŽæ¥å€æŽããã®ã§ã¯ãªããnotifyItemChangedã䜿çšããŠå€æŽããå¿
èŠããããŸãã
holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { item.buyNow(); bindViewHolder(holder, position); } });
onClick
ã¡ãœããã§ã¯ã onClick
ãbindViewHolder
åŒã³åºããbindViewHolder
ãããã¯æ£ãããããŸããã
5. RecyclerView.ViewHolderã§ã¯ããªã¹ãå
ã®ãªããžã§ã¯ãã®äœçœ®ã決å®ãã代ããã«ãgetAdapterPositionãåŒã³åºããonBindViewHolderã¡ãœããããäœçœ®ãæž¡ããŸãã
æ£ããæžãã«ã¯ïŒ
private static class ItemHolder extends RecyclerView.ViewHolder { public ItemHolder(View itemView) { super(itemView); itemView.setOnClickListener(view -> { int position = getAdapterPosition(); ... }); } }
ãŸãã¯ãäœçœ®ã®ä»£ããã«ãœãŒã¹ããŒã¿ãªããžã§ã¯ããžã®ãªã³ã¯ãæž¡ãããšãã§ããŸã
itemView.setOnClickListener((v) -> { productClickListener.onProductClick(product); });
6.è€æ°åœ¢ã«ã¯æ°éæååïŒè€æ°åœ¢ïŒã䜿çšããŸãã æ£ããèªå°Ÿãéžæããããžãã¯ãã³ãŒãã«èšè¿°ãã代ããã«ã
7.倧ããªããããããããŒã¿ããã³ãã«ã«ä¿åããªãã§ãã ããã ãã³ãã«ãµã€ãºã¯å¶éãããŠããŸã
8.ãidããxmlã«ç»é²ãããšãAndroidèªäœãå転ãããšãã«æšæºã®ãã¥ãŒã®ç¶æ
ã埩å
ããŸãã