Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android DataBindingÔ­Àí½âÎö
 
À´Ô´£ºcsdn ·¢²¼ÓÚ£º 2017-6-5
  2598  次浏览      27
 

Ò»¡¢¼ò½é

Ê×ÏÈÉùÃ÷£¬±¾ÎĽ²½âµÄAndroid DataBindingÔ­Àí£¬²»Éæ¼°Android DataBindingµÄÅäÖúÍʹÓã¬Èç¹û´ó¼ÒÏëÁ˽âAndroid DataBindingµÄʹÓý̳̣¬ÇëÈ¥Google Android¹ÙÍø£¬ÀïÃæÓзdz£ÏêϸµÄ½²½â¡£ÁíÍ⣬±¾ÎÄÒ²²»ÊÇΪAndroid DataBinding¸è¹¦Ë̵µģ¬Èç¹û¶Ô×ŶԱ¾ÎĵÄһЩ×ܽáÓв»Í¬¹Ûµã£¬ÇëÁôÑÔ£¬Ï£ÍûºÍ´ó¼ÒÒ»Æð˼¿¼ÕâÏм¼Êõ¡±¡£

DataBinding¿ò¼ÜÊÇÈ¥Äê¹È¸è I/O´ó»áÉϽéÉܵġ°Ð¼¼Êõ¡±£¬ Êý¾Ý°ó¶¨¿ò¼ÜÄܹ»¸øÎÒÃÇ´øÀ´ÁËÒ»¶¨µÄ·½±ã£¬ÎÞÐèfindviewByID²Ù×÷Ò²¿É»ñÈ¡View£¬Êý¾ÝModel¸üÐÂ×Ô¶¯Ó³Éäµ½¿Ø¼þÉÏ¡­¡­ Android DatabingdingÊôÓÚµ¥Ïò°ó¶¨¿ò¼Ü¡£

¹ËÃû˼Ò壬DataBinding¼´Êý¾Ý°ó¶¨£¬Êý¾Ý°ó¶¨±¾²»ÊÇʲôÐÂÏʼ¼Êõ£¬×öasp.NET Web¿ª·¢µÄͬѧӦ¸Ã¶¼ÓùýDatabinding°ó¶¨Í¼±íÊý¾Ý£¬C#±¾ÉíÒ²Ö§³Ö¿Ø¼þµÄÊý¾Ý°ó¶¨¡£ÔÚAndroid²ãÃæ£¬GoogleÒ²²»ÊǵÚÒ»¸ö×öÊý¾Ý°ó¶¨µÄ£¬¿ªÔ´ÏîÄ¿RoboAndroidÔçÒÑ»ùÓÚAndroidƽ̨¿ª·¢ÁËÒ»Ì×Êý¾Ý°ó¶¨¿ò¼Ü£¬RoboAndroidÊôÓÚË«Ïò°ó¶¨¿ò¼Ü¡£

µ¥Ïò°ó¶¨ÊÇÖ¸presentation modelÉϵÄÊôÐÔ¸üлá×Ô¶¯µÄͬ²½µ½ÏàÓ¦µÄÊÓͼÊôÐÔÉÏ¡£Ë«Ïò°ó¶¨ÔÚµ¥Ïò°ó¶¨µÄ»ù´¡ÉÏ£¬Ôö¼ÓÁ˽«ÊÓͼÉϵıä¸üͬ²½»Øpresentation modelÏàÓ¦µÄÊôÐÔÉÏ¡£

¶þ¡¢ÎªÊ²Ã´ÒªÓÐDatabinding

ÕâÒª´ÓÈí¼þµÄÊÓͼÂß¼­¼Ü¹¹Ä£ÐÍ˵Æð£¬³£¼ûµÄÄ£ÐÍÓÐMVC¡¢MVPºÍMVVM£¬ÕâÈýÖÖÄ£Ð͸÷ÓÐÓÅȱµã£¬¿´×źÜÏñ£¬ÆäʵÓнϴó²»Í¬£¬Android DatabindingµÄ×÷ÓþÍÊǽ«Ô­À´Android¿ª·¢Ä£Ê½´ÓMVCתµ½MVVM¡£AndroidµÄActivity+LayoutÎļþģʽÊôÓÚMVC£¬ÎÒÃÇ×öAndroid¿ª·¢µÄʱºò»á·¢ÏÖ£¬Ò»²»Ð¡ÐÄÒ»¸öActivityµÄ´úÂë¾Í³¬¹ý1ǧ¶àÐУ¬ÊÓͼÂß¼­ºÍÒµÎñÂß¼­È«²¿»ìÔÚÒ»Æð£¬´úÂëµÄ¿Éά»¤ÐԷdz£²î£¬ÕâÊÇGoogleÍÆ³öDatabindingÏë½â¾öµÄÎÊÌâ¡£

ÕâÀï¸´ÖÆÕ³ÌùһϴóÅ£ÃǶÔÕâÈý¸öÂß¼­¼Ü¹¹µÄÀí½â¡£

1¡¢MVC

MVC£¬¹ËÃû˼Ò壬MVCÊǽ«Model, View ºÍController·ÖÀ룬Èñ˴˵ÄÖ°Ôð(responsibility)Äܹ»Ã÷È·µÄ·Ö¿ª£¬ÕâÑù²»ÂÛÊǸÄM¡¢ V»¹ÊÇC£¬¶¼¿ÉÒÔÈ·±£ÁíÍâÁ½²ã¿É²»ÓÃ×öÈκÎÐ޸ģ¬Í¬Ê±ÕâÑùµÄ·Ö²ãÒ²¿ÉÒÔ¼ÓÇ¿³ÌʽµÄ¿É²âÊÔÐÔ(testability)£¬ViewºÍModel»ù±¾ÉÏÊÇÏà¹ØµÄ£¬µ«ËüÃDz¢²»»áÓÐÖ±½ÓµÄÏàÒÀ¹ØÏµ£¬¶øÊÇÓÉControllerÈ¥¾ö¶¨Model²úÉúµÄ×ÊÁÏ£¬È»ºó¶ª¸øViewÈ¥×ö³ÊÏÖ£¬Ò²¾ÍÊÇ˵£¬ControllerÊÇModelºÍViewÖ®¼äµÄЭµ÷Õß(coordinator)£¬ViewºÍModel²»ÄÜÖ±½Ó¹µÍ¨£¬ÒÔÈ·±£ÔðÈεķÖÀë¡£¶øController¿ÉÒÔÖ»ÊÇÒ»¸öϵ½áModelºÍViewµÄСÀà±ð£¬Ò²¿ÉÒÔÊÇ´óµ½°üº¬Workflow, Enterprise Services»òÊÇ×öΪÍⲿϵͳµÄProxy ServicesµÈµÄÂß¼­ÏµÍ³£¬MVC¸÷Ôª¼þÊÇ¿ÉÒÔ·ÖÀëµÄ×é¼þ£¬Ò²¿ÉÒÔÊÇ·ÖÀëµÄϵͳ(µ±È»ÒªÉè¼ÆÒ»Ð©»úÖÆÔÚÏ໥¹µÍ¨)¡£¿ÉÒÔ¿´µ½MVCÖÐController£¨Activity£©ÖмÈÒª¿ØÖÆÊÓͼ£¨Layout£©Ò²Òª´¦ÀíÒµÎñ£¨Êý¾Ý£©£¬ControllerÖ»Êǽ«View£¨layout£©ÓëModel¾¡¿ÉÄÜ·Ö¿ª£¬µ±È»ViewÒ²¿ÉÒÔÖ±½Ó»ñÈ¡ModelÊý¾Ý£¬Èç¹û½«ViewÓëModelÍêÈ«·Ö¿ª£¬¾ÍҪʹÓÃMVP¿ò¼Ü¡£

×ܽáMVC£º

1) ÊÓͼ²ã£¨View£©£ºÒ»°ã²ÉÓÃXML²¼¾ÖÎļþ½øÐнçÃæµÄÃèÊö£¬Ò²¿ÉʹÓôúÂë¡£

2) ¿ØÖƲ㣨Controller£©£ºAndroidµÄ¿ØÖƲãÊÇActivity»òFragment£¬Ò»¸öActivity¿ÉÒÔ¶ÔÓ¦¶à¸öFragment¡£Ä¿Ç°µãÆÀAndroidµÄ¿ò¼Ü²ÉÓÃFragment£¬´ó¶àÊýÒ³Ãæ²ÉÓÃFragment×÷Ϊ¿ØÖƲ㡣

3) Ä£ÐͲ㣨Model£©£ºÊý¾ÝÄ£ÐÍ£¬ÓÉÓÚAndroid±äÁ¿¸öÊýÏÞÖÆ£¬Ä¿Ç°µãÆÀAndroid¼¸ºõ²»´æÔÚModel¡£

ȱµã£º

Ö÷ÒªµÄȱµãÊÇControllerÌ«¸´ÔÓ£¬ÏÔʾÂß¼­ºÍÆäËûÂß¼­»ìºÏÔÚÒ»Æð²»ºÃά»¤£»ÓÉÓÚȱÉÙÊý¾ÝÄ£ÐÍÖ§³Ö£¬´úÂë¸ü»ìÂÒ£»Ä£¿é¡¢¿Ø¼þ¿É¸´ÓÃÐԵ͡£

2¡¢MVP

MVP£¬MVPÒ»ÑùÒ²ÊÇÖ°Ôð·ÖÃ÷£¬ÇÒModelÓëView·ÖÀëµÄ¼Ü¹¹£¬µ«ÊÇÕâ¸öP (Presenter)ºÍViewModel¾ÍºÜÀàËÆ£¬²»¹ý¾ÍÈçͬPresenter (Ö÷³ÖÈË)Õâ¸ö×ÖËù´ú±íµÄÒâÒ壬ËùÓÐÖ÷¿ØView³ÊÏֵŤ×÷£¬¶¼ÊÇÓÉPresenterÀ´×ö£¬¶øView±¾ÉíÖ»ÊÇPresenterËùҪʹÓõÄÎę̀¶øÒÑ£¬ËùÒÔViewÔ­ÔòÉÏ»áÏàÒÀÓÚPresenter£¬µ«ÊÇΪÁËÒª×öµ½¹Ø×¢µã·ÖÀë(SoCÔ­Ôò)£¬ËùÒÔÔÚViewºÍPresenter¼ä¶¼»á¼ÓÈëÒ»¸ö½éÃæ(ex: IView)£¬È»ºóÒÔIoCµÄ·½Ê½½«View×¢Éäµ½PresenterÖУ¬¶øPresenter¾ÍʹÓýéÃæËù¶¨ÒåµÄ·½·¨È¥²Ù¿Ø£¬¶øView¾Í͸¹ý½éÃæËù¶¨ÒåµÄ·½·¨È¥³ÊÏÖ½éÃæ¼´¿É¡£µ«Ò²ÒòΪÊÜÏÞÓÚ½éÃæ£¬ËùÒÔPresenterÖ»ÄÜÒÀ½éÃæ¶¨ÒåµÄ¶¯×÷È¥»ØÓ¦Óë´¦Àí£¬¶ø²»ÄÜÔÙ×ö¸ü¶àµÄÑÓÉ칦ÄÜ£¬³ý·Ç¸ü¸ÄViewµÄ½éÃæ¡£

3¡¢MVVM

MVVM£¬MVVMµÄ¼Ü¹¹Ò»ÑùÊÇM, V·ÖÀ룬µ«ÖмäÊÇÒÔVM (ViewModel)À´´®½Ó£¬Õâ¸öViewModel±È½ÏÏñÊÇViewµÄÒ»¸ö´úÀí³Ìʽ£¬Ëü¸ºÔðÖ±½Ó¶ÔModel×ö¹µÍ¨£¬¶øView¿ÉÒÔ͸¹ýһЩ»úÖÆ(ex: Events, Two-way Databindings, ¡­)À´ºÍViewModel¹µÍ¨ÒÔÈ¡µÃ×ÊÁÏ»ò½«×ÊÁÏÅ׸øModel×ö´æÈ¡µÈ¹¤×÷£¬ViewModelÒ²¿ÉÒÔ×÷ΪºÍÍⲿϵͳµÄ´úÀí³Ìʽ£¬ÀýÈçWeb Service»òÊÇREST Service»òÊÇEnterprise ServicesµÈµÈ£¬²»¹ýËüºÍMVC²»Í¬µÄµØ·½£¬¾ÍÊÇViewModelºÍViewµÄð¤ºÏ¶È±È½Ï¸ß£¬ÒòΪView±ØÐëҪ͸¹ýViewModel²Å¿ÉÒÔÈ¡µÃModel£¬¶øViewModelÓÖ±ØÐëÒª´¦ÀíÀ´×ÔViewµÄ֪ͨѶϢ£¬ËùÒÔËäȻְÔðÒ»Ñù·ÖÃ÷£¬µ«ÊÇÈ´²»ÏñMVCÄÇÑù¿ÉÒÔÀ©Õ¹µ½Õû¸öϵͳԪ¼þ¶¼ÄÜÓá£Èç¹ûMVVMÒªºÍMVP±È½ÏµÄ»°£¬MVVM»á±ÈMVP¸üÁé»îÒ»µã¡£

 

×ܽáMVVM£º

1£©µÍñîºÏ¡£ÊÓͼ£¨View£©¿ÉÒÔ¶ÀÁ¢ÓÚModel±ä»¯ºÍÐ޸ģ¬Ò»¸öViewModel¿ÉÒ԰󶨵½²»Í¬µÄ¡±View¡±ÉÏ£¬µ±View±ä»¯µÄʱºòModel¿ÉÒÔ²»±ä£¬µ±Model±ä»¯µÄʱºòViewÒ²¿ÉÒÔ²»±ä¡£

2£© ¿ÉÖØÓÃÐÔ¡£Äã¿ÉÒÔ°ÑһЩÊÓͼÂß¼­·ÅÔÚÒ»¸öViewModelÀïÃæ£¬ÈúܶàviewÖØÓÃÕâ¶ÎÊÓͼÂß¼­¡£

3£© ¶ÀÁ¢¿ª·¢¡£¿ª·¢ÈËÔ±¿ÉÒÔרעÓÚÒµÎñÂß¼­ºÍÊý¾ÝµÄ¿ª·¢£¨ViewModel£©£¬Éè¼ÆÈËÔ±¿ÉÒÔרעÓÚÒ³ÃæÉè¼Æ£¬Ê¹ÓÃExpression Blend¿ÉÒÔºÜÈÝÒ×Éè¼Æ½çÃæ²¢Éú³Éxaml´úÂë¡£

4£©¿É²âÊÔ¡£½çÃæËØÀ´ÊDZȽÏÄÑÓÚ²âÊԵ쬶øÏÖÔÚ²âÊÔ¿ÉÒÔÕë¶ÔViewModelÀ´Ð´¡£

ÓÉÉÏÃæ¸÷¸ö¼Ü¹¹µÄÌÖÂÛ£¬ÎÒÃÇ¿ÉÒԵõ½ÒÔϵĽá¹û£º

4¡¢×ܽáÈýÖּܹ¹£º

MVC ¼Ü¹¹ÊʺÏÓÚ´óÐÍϵͳ£¬Ëü¿ÉÒÔ·Ö²ãÇÒ¿ÉÒÔÔÚʵÌå²ãÃæÇиîΪ²»Í¬µÄ»úÆ÷»ò·þÎñ£¬Ö»Òª±Ë´Ë¼ä¾ßÓÐÊʵ±µÄͨѶЭ¶¨¼´¿É¡£

MVVM ¼Ü¹¹ÊʺÏÏñXAML ÕâÖÖÓë³ÌʽÂëÎÞ¹Ø(code ignorance) µÄʹÓÃÕß½éÃæÉè¼Æ£¬Ö»ÒªView ÖÐÏÂÌØ¶¨µÄÖ¸ÁîÓëViewModel ´®½Ó£¬¾Í¿ÉÒÔÏíÓÐViewModel ¹µÍ¨µÄ¹¦ÄÜ£¬¶øViewModel Ö»Ðè×öÒ»Ð©ÌØ±ðµÄ½éÃæÊµ×÷£¬¼´¿Éƽ˳µÄºÍView ¹µÍ¨¡£

MVP ¼Ü¹¹Êʺϼ¯ÖÐÓɳÌʽÂë¾ö¶¨View ¶¯×÷µÄÓ¦ÓóÌʽ£¬¶øView Ö»ÐèҪʵ×÷ÌØ¶¨µÄ½éÃæ¼´¿É£¬²»ÐèҪ̫¸´ÔӵŤ×÷£¬µ«Presenter Ôò¿ÉÄÜ»áÊÜÏÞÓÚView ½éÃæµÄ¶¯×÷£¬¶øÎÞ·¨×ö¸ü½øÒ»²½¶ÔView µÄ¿ØÖÆ¡£

5¡¢Ð¡½á

ÔÚAndroid¿ª·¢ÖÐÔ­ÓеÄMVC£¨Activity+layout£©Ä£Ê½Ô½À´Ô½²»ÊÊÓã¬Ê×ÏÈ£¬ÊÓͼÂß¼­ºÍÒµÎñÂß¼­²»·Ö£¬µ¼Ö´úÂëÈÝÒ׳öÎÊÌâ¡¢ÄÑÒԿɳÖÐøÐÔά»¤£»Æä´Î£¬ÓÉÓÚÒµÎñÂß¼­»ìÔÚÊÓͼÂß¼­ÀïÃæ£¬ÊÓͼ»ù±¾ÎÞ·¨¸´Óã¬layout±¾ÉíÊÇ´úÂëÎļþ£¬µ«ÊÇÓÖ²»ÏñJava´úÂëÄÇÑù¿Éά»¤£¬Áé»î£¬¿ÉÒÔÓÐÂß¼­£¬ËùÒÔºÜÉÙ¸´ÓÃlayoutÎļþ£¬Óо­ÑéµÄAndroid³ÌÐòÔ±»á¾¡¿ÉÄܱÜÃ⸴ÓÃLayoutÎļþÌØ±ðÊǸ´ÓñðÈËдµÄlayoutÎļþ¡£ËùÒÔ³öÓÚÊÓͼ¸´ÓõÄÄ¿µÄÔ­ÓеÄMVCÒ²²»ÊÊÓã¬MVVM³ÉÁËÒ»ÖÖ±ØÒªµÄÑ¡Ôñ¡£

6¡¢Ç¿µ÷

±¾ÎÄÐèҪ˵Ã÷µÄÊÇAndroid DatabindingÖ»ÊÇÔÚAndroidƽ̨ʵÏÖMVVMµÄÒ»ÖÖ·½Ê½£¬Ç°ÃæËµµÄRoboAndroidÒ²¿ÉÒÔʵÏÖ£»»òÕß¿ª·¢Õß×Ô¼º¶¨ÒåÒ»Ì׿ª·¢¹æ·¶ºÍ¿ò¼Ü£¬Äܹ»½«Android¿ª·¢´óµÀÊÓͼ¡¢Âß¼­ÒµÎñ·ÖÀ룬²¢ÊµÏÖÊÓͼ¸ß¶È¿É¸´ÓÃÒ²ÊÇÒ»ÑùµÄ£»RxJavaҲΪ¿ª·¢ÕßÌṩÁËMVVMµÄÄÜÁ¦¡£

£¨1£©RoboBinding£¿

RoboBindingÊÇÒ»¿î»ùÓÚAndroidµÄÊý¾Ý°ó¶¨×é¼þ£¬Ö§³ÖË«Ïò°ó¶¨µÈ£¬±È½Ï³ÉÊ죬ºÍDataBinding ÀàËÆ£¬ÒòΪDataBinding½è¼øÁËRoboBinding£¬Ä¿Ç°DataBindingÖ»Ö§³Öµ¥Ïò°ó¶¨¡£

ÓëDataBindingÏà±È½Ï£¬ RoboBinding¸üΪ³ÉÊ죬²¢ÇÒÖ§³ÖË«Ïò°ó¶¨£¬µ«ÊÇÒòΪDataBindingÊÇGoogleÇ×¶ù×Ó£¬ÒÔºó¿Ï¶¨»á²»¶Ï¸Ä½ø£¬»á³ÉΪAndroidÐÂÌØÐÔ£¬ËùÒÔ²ÉÓÃDataBinding¿ÉÄܸüÏÖʵ£¬µ«ÊÇÎÒ±¾È˲¢²»ÅųâRoboBinding£¬Í¨¹ýÌåÑéRoboBindingÒ²ºÜ²»´í£¬ÇÖÈëÐÔ²¢²»ÊǺÜÇ¿

£¨2£©RxJava/ RxAndroid £¿

RxJava×îºËÐĵÄÁ½¸ö¶«Î÷ÊÇObservables£¨±»¹Û²ìÕߣ¬Ê¼þÔ´£©ºÍSubscribers£¨¹Û²ìÕߣ©¡£Observables·¢³öһϵÁÐʼþ£¬Subscribers´¦ÀíÕâЩʼþ¡£ÕâÀïµÄʼþ¿ÉÒÔÊÇÈκÎÄã¸ÐÐËȤµÄ¶«Î÷£¨´¥Ãþʼþ£¬web½Ó¿Úµ÷Ó÷µ»ØµÄÊý¾Ý¡­£©;Ò»¸öObservable¿ÉÒÔ·¢³öÁã¸ö»òÕß¶à¸öʼþ£¬ÖªµÀ½áÊø»òÕß³ö´í¡£Ã¿·¢³öÒ»¸öʼþ£¬¾Í»áµ÷ÓÃËüµÄSubscriberµÄonNext·½·¨£¬×îºóµ÷ÓÃSubscriber.onNext()»òÕßSubscriber.onError()½áÊø¡£

RxJava¸üΪÁé»î£¬µ«Êǹ۲졢¶©ÔÄÐèÒªÔÚ´úÂëÖÐ×Ô¼ºÊµÏÖ£¬ÇÖÈëÐԱȽÏÇ¿£¬Ò²Ó°Ïì´úÂë¿É¶ÁÐÔ£¬¾ÍĿǰ´úÂëÀ´¿´£¬¸ÄÔìÆðÀ´´ú¼Û·Ç³£´ó¡£ÔÚAndroidÏîÄ¿ÖкÜÉÙʹÓÃRxJava£¬ËäÈ»¹¦ÄܺÜÇ¿´ó£¬½«Âß¼­¿´×öÊý¾ÝÁ÷£¬Ò»ÇÐÊý¾ÝÇý¶¯£¬µ«ÊÇ´úÂëÇÖÈëÐÔ̫ǿ£¬²»ÊʺÏÔÚÒµÎñÂß¼­¡¢ÊÓͼÂß¼­Öдó·¶Î§Ê¹Óᣵ«ÊÇ£¬RxJavaÔÚÊý¾ÝÁ÷¿ØÖÆÖÐȷʵ¾«Ã¿ÉÒÔ½«RxJava°ü×°µ½ÄãµÄ¿ò¼ÜÖУ¬¸ºÔðͬһ¸öActivityÄ£¿é¼äµÄÊý¾ÝÁ÷¿ØÖÆ£¬ÓÃËûʵÏÖÊý¾ÝÊý¾Ý¹²Ïí¡¢ÏûϢͨÐÅ£¬ÒÔÊý¾ÝÇý¶¯£¬½«Æä·â×°µ½¿ò¼ÜÖУ¬»áÊǺܺõÄÑ¡Ôñ¡£

Èý¡¢Android DataBinding·ÖÎö

View ¡ª¡ª LayoutÎļþ£º

ÊÖ¶¯ÔÚLayoutÎļþÖÐʹÓÃModelÊý¾ÝΪ¿Ø¼þ¸³Öµ¡£

ViewModel ¡ª¡ª ViewDataBinding ʵÏÖÀà

DataBinding¿ò¼Ü»á¸ù¾ÝLayout½øÐеÄÊý¾Ý°ó¶¨Çé¿ö×Ô¶¯Éú³É¸ÃÎļþ£¡²»¿É¸Ä¡£ ViewDataBinding¸ºÔð½«ModelµÄÊý¾ÝºÍ¸üÐÂÐÅÏ¢¸³Öµ¸øLayoutÖеĿؼþ£¬´ïµ½µ¥Ïò°ó¶¨Ð§¹û¡£

Model ¡ª¡ª ʵÏÖObservable¡¢ ObservableMap»òObservableList½Ó¿Ú

¸ºÔðÊý¾ÝÂß¼­´¦Àí£¬°´Õչ涨µÄ±ê׼дget¡¢set·½·¨£¬²¢Í¨ÖªÊý¾Ý¸üС£¿ò¼Ü»áÔÚModelÄÚ²¿´æ´¢ViewDataBinding £¬µ±ModelÐèÒª¸üÐÂÊý¾Ýʱ£¬¿ÉÒÔ֪ͨViewDataBinding ʵÏÖ¶ÔView¸üС£

1¡¢Àý×Ó´úÂë

£¨1£©Model

public class OrderListItemModel extends BaseObservable{ //model¼Ì³ÐBaseObservableÀà
private boolean checked; //¶¨ÒåÊôÐÔ?private int checkBoxVisibility; //¶¨ÒåÊôÐÔ

@Bindable //×¢½â£¬Ö§³Ö×Ô¶¯¸üÐÂ
public boolean getChecked() {? return checked;? }??@Bindable?public void setChecked(boolean checked) {? this.checked = checked;
//֪ͨOrderListItemModel ÖеÄViewDataBinding£¬¸üÐÂcheckedÊôÐÔ? notifyPropertyChanged(BR.checked);
}

£¨2£©Layout£¨View£©

ÉùÃ÷±äÁ¿
<layout? xmlns:android= s¡°http://schemas.android.com/apk/res/android¡±? xmlns:dp=¡°http://schemas.android.com/apk/res-auto¡±? >? <data>? <variable? name=¡°itemMode¡±? type= ¡°com.dianping.tuan.ViewModel.OrderListItemModel¡±>? </variable>? </data>
°ó¶¨Êý¾Ý
<CheckBox? android:id= ¡°@+id/check¡± ? android:layout_width=¡°wrap_content¡±? android:layout_height= ¡°wrap_content¡± ? android:layout_gravity=¡°center_vertical¡±? android:button =¡°@drawable/rad_bg¡± ? android:checked= ¡°@{itemMode.checked}¡± //°ó¶¨checked ? android:visibility= "@{itemMode.checkBoxVisibility}¡° //°ó¶¨Visibility? android:clickable= "false"? android:paddingRight =" 10dp " />

£¨3£©ViewModel £¨ÇÅÁº£©¡ª¡ª ViewDataBinding

ViewDataBindingÎļþÊÇ¿ò¼Ü¸ù¾ÝlayoutÎļþºÍmodel×Ô¶¯Éú³ÉµÄ£¬ÎÞ·¨Ð޸ġ£TuanOrderCommonItem2BindingÀà¾ÍÊÇ¿ò¼Ü×Ô¶¯Éú³ÉµÄViewModel£¬¸¸ÀàÊÇViewDataBinding£¨³éÏóÀࣩ£¬ÊÇÔÚViewDataBindingÀàÖÐÍê³É°ó¶¨¡£
public class TuanOrderCommonItem2Binding extends android.databinding.ViewDataBinding {
this.check = (android.widget.CheckBox) bindings[1];//´æ´¢LayoutÖеĿؼþ
private com.dianping.tuan.Model.OrderListItemModel mItemMode; //´æ´¢ModelÊý¾Ý
// read checked~.~ itemMode ~
if ( itemMode != null)
{
checkedItemMode = itemMode.isChecked(); //»ñÈ¡ItemModeÖеÄÊý¾Ý
}
if ((dirtyFlags & 0b11L) != 0)
{
this.check.setChecked(checkedItemViewMode); //½«Êý¾Ý¸³Öµ¸ø¿Ø¼þ
}
¡­¡­¡­¡­¡­¡­¡­¡­

2¡¢ModelÈçºÎ֪ͨViewDataBinding¸üÐÂView£¿

¿ò¼Üͨ¹ý¹Û²ìÕßģʽ£¬Òì²½¸üнçÃæ£¡ÎÒÃÇ¿´µ½¹ý³Ì·Ç³£¸´ÔÓ£¬×î¹Ø¼ü£¬Êý¾Ý¸üеĹý³ÌÊÇÒì²½µÄ£¬Õâ¿ÉÒÔ±ÜÃâANR£¬µ«ÊÇЧÂÊÄØ£¿Èç¹ûÊÇÊý¾ÝÁ¿±È½Ï´óµÄÁбí»òÕ߱ȽÏÖØµÄÖ÷½çÃæ£¬Ê¹ÓÃÊý¾Ý°ó¶¨ºÏÊÊÂð£¿

ËÄ¡¢Android Databing×ܽá

±¾ÎIJ»ÊÇÀ´ÎªAndroid Databing¸è¹¦Ë̵µģ¬ÈçºÎʹÓÃÒ»Ïîм¼ÊõÐèÒªÖǻۣ¬ÔÚÎÒÃÇδÍêÈ«Á˽âËüʱ£¬×îºÃ½÷É÷µÄÔÚ¹¤³ÌÏîÄ¿ÖÐʹÓá£×îºóÂÞÁÐһЩ×Ô¼º¶ÔAndroid DatabingµÄ×ܽᣬÆäÖпÉÄÜÓв»ÍêÉÆ»ò²»³ÉÊìµÄµØ·½£¬Ï£Íû´óÅ£ÃÇÅúÆÀÖ¸Õý¡£Èç¹û¶ÁÕßÏëÔÚ×Ô¼º¿ª·¢µÄAPPÖÐʹÓÃAndroid Databing£¬Ï£ÍûÄã¶ÔËüÓÅȱµãÓÐ×ã¹»µÄÁ˽⣬Óгä×ãµÄ˼Ïë×¼±¸¡£

Óŵ㣺

1¡¢×Ô¶¯»¯°ó¶¨+MVVMÓŵã

2¡¢Ê¹ÓÃDataBindingºó£¬ÎÞÐèÖ±½Ó»ñÈ¡¡¢²Ù×÷ÊÓÍ¼ÔªËØ£¬Äܹ»°ïÖú Activity»òFragment¼õÉÙ¶ÔÊÓͼ¿ØÖƵĴúÂëÁ¿

²»×㣺

1¡¢Ä¿Ç°Ö»Ö§³Öµ¥Ïò°ó¶¨£»

2¡¢ViewModelÓëViewÒ»Ò»¶ÔÓ¦£»

3¡¢Ê¹ÓÃÆðÀ´Áé»îÐԱȽϵͣ»

4¡¢ModelÊôÐÔ·¢Éú±ä»¯Ê±£¬ViewDatabinding²ÉÓÃÒì²½¸üÐÂÊý¾Ý£¬¶ÔÓÚÏÖʵ´óÁ¿Êý¾ÝµÄListView£¬»áÓÐÒ»¶¨ÑÓ³Ù£¬ÔÚʵ¼ù²âÊÔÖз¢ÏÖ£¬DatabingЧÂʽϵͣ¬¶ÔÓÚ¸ºÔðµÄ½çÃæ²»Ì«ÊÊÓã»

5¡¢×Ô¶¯Éú³É´óÁ¿´úÂëºÍÊôÐÔ×ֶΣºViewDataBinding ʵÏÖÀà DataBinderMapper µÈ

   
2598 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì