package Ġcom . example . android . mar sp hot os čĊč Ċ import Ġandroid . view . View č Ċ import Ġandroid . widget . ImageView č Ċ import Ġandroidx . core . net . to Uri č Ċ import Ġandroidx . databinding . Binding Adapter č Ċ import Ġandroidx . recyclerview . widget . RecyclerView č Ċ import Ġco il . load č Ċ import Ġcom . example . android . mar sp hot os . network . M ars Photo č Ċ import Ġcom . example . android . mar sp hot os . overview . M ars Api Status č Ċ import Ġcom . example . android . mar sp hot os . overview . Photo Grid Adapter čĊč Ċ /** čĊ Ġ* Ġ å¯¾è±¡ ï¼ļ grid _ view _ item . xml åĨħ ãģ® ImageView čĊ Ġ* Ġ ç¬¬ä¸Ģ å¼ķ æķ° ãģ® View ãĤ¢ ãĤ¤ ãĥĨ ãĥł ãģ« " imageUrl å±ŀæĢ§ ( ä»Ĭ åĽŀ ãģ® çĭ¬ èĩª å®ļç¾© )" ãģĮãģĤãĤĭ åł´åĲĪ ãĢģ ç¬¬äºĮ å¼ķ æķ° ãĤĴ å±ŀæĢ§ åĢ¤ ãģ¨ãģĹãģ¦ è¨Ńå®ļ čĊ Ġ* Ġ ä»Ĭ åĽŀ ãģ¯ ãĢģ img Url å±ŀæĢ§ åĢ¤ ãģ« URL ãĤĴè¨Ńå®ļ čĊ Ġ*/ č Ċ @ Binding Adapter (" imageUrl ") č Ċ fun Ġbind Image ( img View : ĠImageView , Ġimg Url : ĠString ?) Ġ{ čĊĠĠĠ Ġ// ĠãĤ ª ãĥĸãĤ¸ãĤ§ãĤ¯ãĥĪ ãģĮ null ãģ§ ãģªãģĦ ãģ¨ ãģį ãģ« ãģ® ãģ¿ . let { Ġ} åĨħ ãģ® åĩ¦çĲĨ ãģĮ å®Łè¡Į čĊĠĠĠ Ġimg Url ?. let Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ĠURI ãĤª ãĥĸãĤ¸ãĤ§ãĤ¯ãĥĪ çĶŁæĪĲ , çĶ» åĥı ãĤĴ img View ãģ« èªŃãģ¿ è¾¼ ãģ¾ ãģĽ ãĤĭ čĊĠĠĠĠĠĠĠ Ġval Ġimg Uri Ġ= Ġimg Url . to Uri (). build Up on (). scheme (" https "). build () čĊĠĠĠĠĠĠĠ Ġimg View . load ( img Uri ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( R . drawable . loading _ animation ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( R . drawable . ic _ broken _ image ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ /** čĊ Ġ* Ġ å¯¾è±¡ ï¼ļ fragment _ overview . xml åĨħ ãģ® RecyclerView čĊ Ġ* ĠM ars Photo ãģ® ãĥªãĤ¹ãĥĪ ãģ« å¤īæĽ´ ãģĮãģĤãĤĭ ãģĭ çĽ £ è¦ĸ čĊ Ġ* Ġ å¤īæĽ´ ãģĮãģĤ ãĤĮãģ° Photo Grid Adapter ãĤĴ åĪĿ æľŁ åĮĸ ãģĻãĤĭ ãĢĤ čĊ Ġ* čĊ Ġ*/ č Ċ @ Binding Adapter (" list Data ") č Ċ fun Ġbind RecyclerView ( re cyclerView : ĠRecyclerView , Ġdata : ĠList < M ars Photo > ?) Ġ{ čĊĠĠĠ Ġval Ġadapter Ġ= Ġre cyclerView . adapter Ġas ĠPhoto Grid Adapter čĊĠĠĠ Ġ// ĠRecyclerView ãģ« æĸ°ãģĹãģĦ ãĥªãĤ¹ãĥĪ ãģĮ åĪ©çĶ¨ åı¯èĥ½ ãģª ãģĵãģ¨ ãĤĴ éĢļçŁ¥ čĊĠĠĠ Ġadapter . submit List ( data ) č Ċ } čĊč Ċ /** čĊ Ġ* Ġ å¯¾è±¡ ï¼ļ fragment _ overview . xml åĨħ ãģ® åıĸå¾Ĺ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãĤĴ è¡¨ ãģĻ ImageView ãģ« è¿½åĬł ãģĻãĤĭ å±ŀæĢ§ čĊ Ġ* ĠviewModel ãģ® ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãģĮ å¤īæĽ´ ãģķãĤĮãģŁ ãģ¨ ãģį ãģ« ãģĵãģ® ãĥ¡ ãĤ½ãĥĥãĥī ãģĮ åĳ¼ ãģ° ãĤĮ ãĢģ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãģ« å¿ľ ãģĺ ãģŁ çĶ» åĥı ãĤĴ è¡¨ç¤º čĊ Ġ*/ č Ċ @ Binding Adapter (" mars Api Status ") č Ċ fun Ġbind Status ( status ImageView : ĠImageView , Ġstatus : ĠM ars Api Status ?) Ġ{ čĊĠĠĠ Ġwhen Ġ( status ) Ġ{ čĊĠĠĠĠĠĠĠ ĠM ars Api Status . LOADING Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . visibility Ġ= ĠView . VISIBLE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . setImage Resource ( R . drawable . loading _ animation ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠM ars Api Status . ERROR Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . visibility Ġ= ĠView . VISIBLE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . setImage Resource ( R . drawable . ic _ connection _ error ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠM ars Api Status . DONE Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . visibility Ġ= ĠView . GONE čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }