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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
AndroidÎÞÂñµãÊý¾ÝÊÕ¼¯SDK¹Ø¼ü¼¼Êõ
 
À´Ô´£º¼òÊé ·¢²¼ÓÚ£º 2017-5-24
  3826  次浏览      19
 

Ç°ÑÔ

¡¡¡¡¼øÓÚÈÕÒæÇ¿Áҵľ«Ï¸»¯ÔËÓªÐèÇó£¬ÍøÒ×ÀֵôÓÈ¥Ä꿪ʼ¹¹½¨´óÊý¾Ýƽ̨£¬<<ÎÞÂñµãÊý¾ÝÊÕ¼¯SDK>>Òò´ËÁ¢ÏÓÃÓÚÏò´óÊý¾Ýƽ̨ÌṩȫÁ¿£¬ÍêÕû£¬×¼È·µÄ¿Í»§¶ËÊý¾Ý£®

¡¡¡¡<<ÎÞÂñµãÊý¾ÝÊÕ¼¯SDK>>Android¶Ë´Ó×ÅÊÖ£¬µ½¾­ÀúÖع¹£¬Öð²½ÍêÉƵ½ÏÖÔÚÒѾ­ÓпìÒ»ÄêµÄʱ¼äÁË£®ÆÚ¼ä´Ó¿ªÔ´ÉçÇøÒÔ¼°Í¬ÐÐÖеõ½ÁËһЩºÜÓÐÒâÒåµÄ¼¼Êõ²Î¿¼£¬Òò´ËÔÚÕâ¸öSDKÇ÷ÓÚÍêÉƵĽñÌ죬ÎÒÃÇÒ²¿¼Âǽ«Õâһ·ÔÚ¼¼ÊõÉϵÄ̽Ë÷¾­ÀúºÍÊÕ»ñ·ÖÏí³öÀ´£®

4ÔÂ16-18ÈÕ£¬QCon±±¾©2017È«ÇòÈí¼þ¿ª·¢´ó»áÉÏÓÐͬÊ´ú±íAndroid/IOSÁ½¶Ë½øÐÐͳһµÄ¼¼Êõ·ÖÏí£¬»¶Ó­´ó¼ÒÇ°È¥½»Á÷

ÎÒÃÇ»áÖð½¥ÕûÀíһЩ¼¼ÊõÎÄÕµ½Õâ¸ö¼òÊéÕ˺š°Òƶ¯¶ËÊý¾ÝÊÕ¼¯ºÍ·ÖÎö¡±

¡¡¡¡Ö®Ç°¹ØÓÚAndroid¶ËµÄ<<ÎÞÂñµãÊý¾ÝÊÕ¼¯SDK>>ʹÓõļ¼Êõ£¬Ð´ÁËһƪÎÄÕÂ<<Android AOPÖ®×Ö½ÚÂë²å×®>>£¬Õâ¸öÊÇAndroid¶Ë½øÐÐÒ»ÇÐÊÕ¼¯µÄÆðµã£¬ÎÒÃǾÍÊÇÓÃÕâ¸ö·½·¨ÇáËÉÄõ½¸÷ÖÖ£¢Hook£¢µãµÄ£®

¡¡¡¡±¾ÆªÎÄÕÂÔò½Ó׎²Ò»Ï¹ØÓÚÊÕ¼¯SDKÄÚ²¿ÊÕ¼¯Âß¼­µÄһЩ¹Ø¼ü¼¼Êõ.

Ŀ¼

Ò»¡¢¸ÅÊö

1.1 SDKÊý¾ÝÊÕ¼¯ÄÜÁ¦ÏÖ×´

1.2 ¹Ø¼ü¼¼Êõµã¸ÅÊö

¶þ¡¢ViewµÄΨһ±êʶ£¨ID£©

2.1 µ÷ÑÐ

2.2 ÀûÓÃViewTree¹¹½¨ViewID

2.3 ViewPathµÄÉú³É

2.4 ViewPathµÄÓÅ»¯

Èý¡¢Ò³ÃæµÄ»®·Ö

3.1 ºÏÀí»®·ÖÒ³ÃæµÄÖØÒªÐÔ

3.2 AndroidÖеÄÒ³Ãæ

3.3 Ò³ÃæÃû×é³É

ËÄ¡¢ÎÞÐèÂñµãÇáËÉÊÕ¼¯¶¨ÖƵÄÒµÎñÊý¾Ý

4.1 ÅäÖÃʾÀý

4.2 ÎÞÂñµãÊÕ¼¯Á÷³Ì

4.3 Êý¾Ý·¾¶£¨DataPath£©

Îå¡¢½áÓï

Ò»¡¢¸ÅÊö

¡¡¡¡±¾²¿·ÖÊ×ÏȼòÒª½éÉÜÒ»ÏÂÎÒÃǵÄÊÕ¼¯·½°¸Ä¿Ç°¿ÉÒÔÊÕ¼¯µ½ÄÄЩÊý¾Ý£¬È»ºó¶ÔÓÚ±¾ÎÄÖصã½éÉܵÄÈý¸ö¼¼Êõµã½øÐиÅÊö£®

1.1 SDKÊý¾ÝÊÕ¼¯ÄÜÁ¦ÏÖ×´

¡¡¡¡Ä¿Ç°ÎÒÃǵÄSDK½øÐÐÊý¾ÝÊÕ¼¯Ê±»ù±¾ÓÐÁ½¸öÄÜÁ¦£º

a. ͨÓÃÊý¾ÝÈ«Á¿ÊÕ¼¯

¡¡¡¡Í¨ÓÃÊý¾ÝÖ¸µÄÊÇÓëÒµÎñÎ޹صÄÓû§ÐÐΪÊý¾Ý£¬ÎÞÂÛÊǵçÉÌÓ¦Óû¹ÊÇÉçÇøÓ¦Ó㬽ÓÈëSDKºóͨÓÃÊý¾ÝµÄÊÕ¼¯É϶¼ÊÇÎÞ²îµÄ£¬ÕâЩͨÓÃÊý¾Ý´óÖÂÓУº

b. ÒµÎñÏà¹ØÊý¾ÝÐèÇóͨ¹ýÏ·¢ÅäÖýøÐÐÎÞÂñµã¶¨ÖÆÊÕ¼¯

¡¡¡¡³ýÁËÉÏÊöͨÓÃÊý¾Ý£¬Óë¾ßÌåÒµÎñÏà¹ØµÄÊý¾ÝÊÕ¼¯¡£ÄÃÍøÒ×¹ó½ðÊôµÄÊ×Ò³¾Ù¸öÀý×Ó£º

ͼ1-1 ÎÞÂñµãÊÕ¼¯ÒµÎñÊý¾ÝʾÀý

¡¡¡¡¼ÙʹÐèÒªÔÚÓû§µã»÷ÉÏͼºì¿òÇøÓòʱ£¬°Ñ¡°ÔÁ¹óÒø¡±Õâ¸ö½»Ò×Æ·µÄID£¨»òÕßÏ·½ÏÔʾµÄÖ¸ÊýµÈ£¬Ö»ÒªÔÚÄÚ´æÖдæÔÚµÄÊý¾Ý¶¼¿ÉÒÔ£©Ò»Æð±¨ÉÏÀ´¡£

¡¡¡¡¶ÔÓÚ´ËÖÖÐèÇó£¬Êý¾ÝÊÕ¼¯SDK×öµ½ÁËÎÞÐèÂñµã£¬²»ÒÀÀµ¿ª·¢ÖÜÆÚ£¬Í¨¹ýÏßÉÏÏ·¢Ò»Ð©ÅäÖÃÐÅÏ¢£¬¼´¿É¼´Ê±½øÐÐÊý¾ÝÊÕ¼¯¡£¾ßÌåÔ­ÀíµÚËĽÚÐðÊö¡£

1.2¹Ø¼ü¼¼Êõµã¸ÅÊö

a. ViewµÄΨһ±êʶ£¨ID£©,£¨Ïê¼û±¾Îĵڶþ½Ú£©

¡¡¡¡µ±ÎÒÃÇÊÕ¼¯¿Ø¼þÊý¾ÝʱÅöµ½µÄµÚÒ»¸öÎÊÌâ¾ÍÊÇ£ºÈçºÎ°Ñ½çÃæÉϵÄÈκÎÒ»¸öViewÓëÆäËûViewÇø·Ö¿ªÀ´.

±ÈÈ磺ij¸öButton±»µã»÷ÁË

ÎÒÃÇÔÚÉϱ¨Êý¾ÝµÄʱºòÐèÒª°ÑÕâ¸öButtonºÍÆäËûËùÓпؼþ£¨±ÈÈçÁíÒ»¸öButton£¬ÁíÒ»¸öImageViewµÈ£©Çø·Ö¿ªÀ´£¬ÕâÑùÕâÌõÉϱ¨µÄÊý¾Ý²ÅÄܱíʾ£¢¾ÍÊÇÄǸöButton±»µã»÷ÁËһϣ¢.

¡¡¡¡Õâ¾ÍÐèҪΪ½çÃæÉϵÄÿһ¸ö¿Ø¼þÉú³ÉÒ»¸öΨһµÄID. ´ËID³ýÁ˾ßÓÐÇø·ÖÐÔ£¬»¹ÐèÒªÓÃÓÚÒ»ÖÂÐÔ£®Ò»ÖÂÐÔÊÇͬһ¸öViewÎÞÂÛ½çÃæ²¼¾ÖÈçºÎ¶¯Ì¬±ä»¯£¬»òÕß˵¶à´Î½øÈëͬһҳÃ棬´ËIDÐèÒª±£³Ö²»±ä£®

b. Ò³ÃæµÄ»®·Ö£¬£¨Ïê¼û±¾ÎĵÚÈý½Ú£©

¡¡¡¡³ýÁËActivityÓÐЩFragmentÒ²ÐèÒª¿´×÷Ò³Ã棬Õâ¾ÍÒªÇó£º

1.ÔÚFragment show/hideʱÉϱ¨Ïà¹ØÒ³Ãæʼþ£®

2.Ò³ÃæFragmentÖз¢ÉúµÄÓû§½»»¥Ê¼þÒ²ÐèÒª¹éÓÚ´ËFragmentÒ³Ã棬¼´µã»÷ij¸öViewÐèÒªÉϱ¨Ò³ÃæFragmentµÄÐÅÏ¢£¨´ÓViewÖÐÔõô»ñÈ¡FragmentÐÅÏ¢£¿£©

c. ÎÞÐèÂñµãÇáËÉÊÕ¼¯¶¨ÖƵÄÒµÎñÊý¾Ý£¬£¨Ïê¼û±¾ÎĵÚËĽڣ©

¡¡¡¡ÈçÇ°ÃæËùÊö£¬Ä¬ÈÏÇé¿öÏÂÊý¾ÝÊÕ¼¯SDK»áÊÕ¼¯È«Á¿µÄÓû§½»»¥Êý¾Ý£¬¶ÔÓÚ¶¨ÖƵÄÒµÎñÊÕ¼¯ÐèÇó£¬Êý¾ÝÊÕ¼¯SDKÒ²×öµ½ÁËÎÞÐè´úÂëÂñµã£¬Í¨¹ýÏßÉÏÏ·¢Ò»Ð©ÅäÖýøÐм´Ê±ÊÕ¼¯£®

¶þ¡¢ViewµÄΨһ±êʶ£¨ID£©

2.1 µ÷ÑÐ

¡¡¡¡ÓÃÓÚÇø·Ö½çÃæÉÏÿ¸öViewµÄID? AndroidϵͳÊÇ·ñÌṩ¸øÁËÎÒÃÇÕâ¸öID?

ȷʵ,AndroidϵͳÌṩÁËÒ»¸öID,view.getId()¼´¿É»ñµÃÒ»¸öintÐ͵ÄidÓÃÓÚÇø·ÖView,µ«ÊÇÕâ¸öIDÒòΪÒÔÏÂÁ½¸öÔ­ÒòÈ´²¢²»ÄÜÂú×ãÎÒÃǵÄÐèÒª.

1.ÓÐÏ൱һ²¿·ÖviewÊÇNO_ID£¬±ÈÈçÔÚ²¼¾ÖÎļþÖÐδָ¶¨id,»òÕßÖ±½ÓÔÚ´úÂëÀïÃænew³öÀ´view£¬view.getId()·µ»ØµÄÈ«²¿¶¼ÊÇNO_ID

2.Õâ¸öIDÊDz»Îȶ¨µÄ£¬ÓÉÓÚÕâ¸öIDÆäʵ¾ÍÊÇÿ´Î±àÒë²úÉúµÄRÎļþÖеÄint³£Á¿£¬Òò´Ëͬһ¸ö°´Å¥£¬Á½¸ö°æ±¾±àÒë³öÀ´µÄIDºÜ¿ÉÄÜʱ²»Ò»ÑùµÄ£®

Òò´Ë£¬ÎÒÃÇÖ»ÄÜ×Ô¼º¶¯ÊÖ¹¹½¨ÎÒÃǵÄIDඣ¬Ôõô¹¹½¨£¿´ð°¸ÊÇÀûÓÃËùÊôPage+ViewTree¹¹½¨ViewID.

2.2 ÀûÓÃViewTree¹¹½¨ViewID

¡¡¡¡ÔÚAndroidµÄ¸ÅÄîÀÿ¸öWindow(ActivityWindow/DialogWindow/PopupWindowµÈ)ÉÏÃ涼Éú³¤×ÅÒ»¿ÃViewTree.¶øÆÁÄ»Öп´µ½µÄ¸÷Öֿؼþ(ImageView/ButtonµÈ)¶¼ÊÇÕâ¿ÃViewTreeÉϵĽڵ㣮

¡¡¡¡ÓÐAndroid¿ª·¢»·¾³µÄͬѧֻÐèÒª´ò¿ªAndroidDeviceMonitor-dump view hierarchy ¾Í¿ÉÒÔ¿´µ½ViewTreeµÄÄ£Ñù£¬ÈçÏÂͼ£º

ͼ2-1 ViewTree¸ÅÄîͼ

Òò´Ë£¬ÎÒÃÇÃÈÉú³öÒ»¸öÏë·¨£º

1.ÀûÓÃPage+ViewTreeÖеÄλÖù¹½¨ViewID.

ViewÔÚViewTreeÖеÄλÖÃÖ÷ÒªÓÃÁ½µãÀ´È·¶¨£º

2.×ÝÏòµÄÉî¶È

3.ºáÏòµÄindex

¿¼ÂÇÕâÁ½¸öÒòËغó£¬ÎÒÃǶ¨ÒåÒ»¸öViewPath:

ViewPath£ºµ±Ç°viewµ½ViewTree¸ù½ÚµãµÄÒ»Ìõ·¾¶£¬ÓÃÓÚÔÚViewTreeÖÐΨһ¶¨Î»µ±Ç°view¡£Â·¾¶ÖеÄÿ¸ö½Úµã°üº¬Á½²¿·ÖÐÅÏ¢,¼´½ÚµãViewÀàÐÍÐÅÏ¢£¬ÒÔ¼°½ÚµãViewÔÚÐÖµÜÖеÄindex¡£

ÈçÏÂͼ£¬ÊÇÒ»¸ö¼òµ¥µÄViewTreeÄ£ÐÍ£¨¼òµ¥µ½Éî¶ÈÖ»ÓÐÁ½²ã£¬Ã¿²ãÖ»ÓÐÁ½Èý¸ö¿Ø¼þ£©

ͼ2-2 ViewTreeÄ£ÐÍͼ

°´ÕÕ֮ǰ¸øµÄ¶¨Ò壬ÉÏͼÖпؼþ1£¬2£¬3,4µÄViewPathÈçÏÂ

¿Ø¼þ1ViewPath: RootView/LinearLayout[0] 
  indexΪ1±íʾ´Ë½ÚµãÊÇÐֵܽڵãÖеÚÒ»¸ö¿Ø¼þ
¿Ø¼þ4ViewPath: RootView/LinearLayout[0] /ChildView1[0]
¿Ø¼þ2ViewPath: RootView/RelativeLayout[1]
¿Ø¼þ3ViewPath: RootView/LinearLayout[2]

ÉÏÊö¸ø³öµÄViewPathÖУ¬Ã¿¸ö½Úµã£¨³ýÁËÊ׽ڵ㣩ÓÐÁ½²¿·ÖÄÚÈÝ£º

1.LinearLayout,RelativeLayout,ChildView1µÈViewTypeÐÅÏ¢£¨½ÚµãViewµÄÀàÐÍ£©

2."[]"ÄÚµÄindexÐÅÏ¢£¬´Ëindexָʾ´Ë½ÚµãÊÇÐֵܽڵãµÄµÚ¼¸¸ö

ÕâÊÇ×î³õµÄViewPath,ÓÃViewPath¶¨Î»view£¬ÓÐÁ½µãÌرðÖØÒª£º

1.Ò»ÖÂÐÔ£º ͬһ¸öviewµÄViewPathÔÚViewTreeµÄ¶¯Ì¬±ä»¯ÖÐÓ¦±£³Ö²»±ä

2.Çø·Ö¶È£º ²»Í¬viewµÄViewPathÓ¦¸Ã²»Í¬

°´ÕÕÕâ¸ö×î³õµÄViewPath¶¨ÒåÔÚʵ¼ùÖл¹²»ÄÜÔÚÒ»ÖÂÐÔºÍÇø·Ö¶ÈÉÏÂú×ãÎÒÃǵÄÐèÇ󣬺óÃæ»á¶ÔViewPath½øÐÐÓÅ»¯¡£

2.3 ViewPathµÄÉú³É

¡¡¡¡ÉÏÃæÎÒÃÇÓɹ¹½¨ViewIDµÄÐèÇóÒý³öÁËViewPathµÄ¶¨Ò壬ÄÇôµ±½»»¥Ê¼þ£¨ÀýÈ磺°´Å¥µã»÷£©·¢Éúʱ£¬ÎÒÃÇÈçºÎÉú³É´Ë¿Ø¼þµÄViewPath£¿

¡¡¡¡ÈçÉÏһƪÎÄÕÂ<<Android AOPÖ®×Ö½ÚÂë²å×®>>ËùÊö£¬µ±Óû§µã»÷ij¸ö°´Å¥Ê±£¬ÎÒÃDzåÈëOnClickListener.OnClick·½·¨ÖеÄÈçÏ´úÂ뽫»á±»µ÷Óãº

Monitor.onViewClick(view);

ÉÏÃ棬Èë²Îview¼´Îªµ±Ç°±»µã»÷µÄview£¬»ñÈ¡´ËviewµÄViewPathα´úÂëÈçÏ£º

  public static ViewPath getPath
(View view) {
do {
//1. ¹¹ÔìViewPathÖÐÓÚview ¶ÔÓ¦µÄ½Úµã :ViewType[index]
ViewType=view.getClass() .getSimpleName();
index=viewÔÚÐֵܽڵãÖеÄindex;
ViewPath½Úµã=ViewType[index];
}while ((view=view.getParent() )instanceo f View);//2. ½«viewÖ¸ÏòÉÏÒ»¼¶µÄ½Úµã
}

¹¹Ôì³öÀ´µÄViewPathÈçÏÂÃæÀý×ÓËùʾ£º

DecorView/LinearLayout[0]/
FrameLayout[0]
/ActionBarOverlayLayout[0]/
ContentFrameLayout[0]
/FrameLayout[0]/LinearLayout[0]
/ViewPager[0]
/ButtonFragment[0]/AppCompat
Button[0]

2.4 ViewPathµÄÓÅ»¯

a. Ò»ÖÂÐÔÓÅ»¯1

Çé¾°£º

ÔÚͼ2-2 ViewTreeÄ£ÐÍͼÖУ¬Èç¹ûÏñÏÂÃæͼÖÐËùʾ£¬Ôڿؼþ2ºÍ3Öж¯Ì¬²åÈëÒ»¸öFrameLayoutÄØ£¿

ͼ2-3 Android½çÃ涯̬ÐԱ仯Çé¾°1

´Ëʱ°´ÕÕԭʼViewPathµÄ¶¨Ò壬ÎÒÃÇÀ´¿´¿´¿Ø¼þ3µÄViewPath·¢ÉúÁËÄÄЩ±ä»¯£¿

ViewTree¶¯Ì¬±ä»¯Ç°: RootView/LinearLayout[2]
ViewTree¶¯Ì¬±ä»¯ºó: RootView/LinearLayout[3]

ÓÅ»¯£º

ViewPath½ÚµãÖÐindexµÄº¬Òå´Ó¡°ÐֵܽڵãµÄµÚ¼¸¸ö¡±ÓÅ»¯Îª:¡°ÏàͬÀàÐÍÐֵܽڵãµÄµÚ¼¸¸ö¡±

ÓÅ»¯ºó,·¢Éúͼ2-3Ëùʾ½çÃæ²¼¾Ö¶¯Ì¬±ä»¯Ê±£¬¿Ø¼þ3µÄViewPath±ä»¯Îª£º

ViewTree¶¯Ì¬±ä»¯Ç°: RootView/LinearLayout[1]  
 indexΪ1±íʾ´Ë½ÚµãÊÇÐֵܽڵãÖеڶþ¸öLinearLayout
ViewTree¶¯Ì¬±ä»¯ºó: RootView/LinearLayout[1]

¿ÉÒÔ¿´³ö£¬´Ë´¦ÓÅ»¯Ê¹¿Ø¼þ3µÄViewPathÔÚViewTree¶¯Ì¬²åÈë³ýÁËLinearLayoutÖ®ÍâÆäËüÈκÎÀàÐÍʱ¶¼±£³ÖÇ°ºóÒ»Ö¡£

b. Ò»ÖÂÐÔÓÅ»¯2

Çé¾°£º

ÔÚͼ2-2 ViewTreeÄ£ÐÍͼÖУ¬Èç¹ûÏñÏÂÃæͼÖÐËùʾ£¬Ôڿؼþ2ºÍ3Öж¯Ì¬²åÈëÒ»¸öLinearLayoutʱ£¬¿Ø¼þ3µÄViewPathÄÜ·ñ¼ÌÐø±£³ÖÇ°ºóÒ»Ö£¿

°´ÕÕÉÏÊöÇé¾°£¬¿Ø¼þ3ViewPathµÄ±ä»¯ÈçÏ£º

ViewTree¶¯Ì¬±ä»¯Ç°: RootView/LinearLayout[1] 
  indexΪ1±íʾ´Ë½ÚµãÊÇÐֵܽڵãÖеڶþ¸öLinearLayout
ViewTree¶¯Ì¬±ä»¯ºó: RootView/LinearLayout[2] Ç°Ãæ²åÈëÒ»¸öLinearLayoutµ¼Ö´˽ڵã±äΪÐÖµÜ½Ú µãÖеÚÈý¸öLinearLayoutÁË

ÎÊÌâ

ÉÏÊöÇé¾°Ö¸µÄÆäʵÊÇÒ»¸öÎÊÌ⣺ViewTreeÖÐͬÀàÐÍÐֵܽڵ㶯̬±ä»¯£¨²åÈë/ÒƳý/ÒÆλ£©Ó°ÏìViewPathµÄÒ»ÖÂÐÔ

1.ViewPath½ÚµãÖеÄindex£¬ÔÚͬÀàÐÍ£¨ViewTypeÏàͬ£¬ÀýÈ綼ÊÇLinearLayout£©Ðֵܽڵ㶯̬¼ÓÈë/ɾ³ýʱ£¬µ±Ç°½ÚµãµÄindexÎÞ·¨Ôڱ仯ǰºó±£³ÖÒ»Ö¡£

2.¡°Ò»ÖÂÐÔÓÅ»¯1¡±ÖеÄÓÅ»¯¿ÉÒÔµÖÓù²»Í¬ÀàÐÍÐֵܽڵãµÄÓ°Ï죬ȴ¶ÔͬÀàÐÍÐֵܽڵãµÄÓ°ÏìÎÞ¿ÉÄκΡ£

´ÓViewPathµÄ¶¨ÒåÉÏÄÑÒÔÕÒµ½ÔÚͬÀàÐÍÐֵܽڵ㶯̬±ä»¯Ç°ºó±£³ÖÒ»Öµķ½·¨£¬µ«ÎÒÃÇ¿ÉÒÔ·ÖÎö·¢Éú´ËÖÖ½çÃ涯̬±ä»¯µÄÇé¾°£º

1.ʹÓÃFragmentµÄ¶¯Ì¬²¼¾Ö

¡¡¡¡Android½çÃæµÄ¶¯Ì¬²¼¾Ö·¢ÉúÇé¾°ÖУ¬Ê¹ÓÃFragmentʵÏÖ½çÃ涯̬±ä»¯µÄƵÂʺÍÓ°Ïì¿Ø¼þÊýÁ¿»¹ÊDZȽϴóµÄ£¨Ïà¶ÔÓÚÖ±½ÓaddView()£©

2.ListView£¨µÈ¿É¸´ÓÃView£©ÖÐͬÀàÐ͵ÄitemViews¡£

¡¡¡¡´ËÖÖÇé¿öËäȻûÓз¢ÉúÔÚÒ»¸öitemViewÇ°¶¯Ì¬²åÈëÒ»¸öitemView,µ«ÊÇÓÉÓÚitemViewµÄ¸´Ó㬵¼ÖÂitemViewչʾµÄÄÚÈݺÍÔÚ¸¸½ÚµãlistViewÄÚµÄindexµÄ¶ÔÓ¦¹Øϵ¶¯Ì¬±ä»¯£¬Òò´ËÒ²¹éÓÚ´ËÀà¡£

2ÖÐËù˵¡°ListViewµÈ¿É¸´ÓÃView¡±Ôì³ÉµÄÎÊÌâºóÃæ»áÓÐÓÅ»¯£¬´Ë´¦Õë¶Ô1ÖеÄÇé¾°ÌÖÂÛ¡£1ÖÐÇé¾°·¢ÉúʱÈçÏÂͼ£º

ͼ2-4 ʹÓÃFragmentÔì³É½çÃ涯̬ÐÔµÄÇé¾°

¡¡¡¡ÉÏͼÖÐFragmentA,FragmentB,FragmentCµÄ¶¥²ãÊÓͼ¿Ø¼þÈ«²¿ÊÇLinearLayout£¨Í¬ÀàÐÍ£©£¬´ËʱÕâÈý¸öFragment¼ÓÈëµÄ˳Ðò½«Ôì³ÉViewPathÔÚ´Ë´¦¸÷ÖÖ²»Ò»Ö£¬´Ó¶øµ¼ÖÂViewPathÔÚ¶¯Ì¬±ä»¯Ç°ºó²»Äܱ£³ÖÒ»Ö£¨ÈçÇ°Ã棺ViewTree¶¯Ì¬±ä»¯Ç°ºó¿Ø¼þ3ViewPathµÄ±ä»¯Ëùʾ£©¡£

ÓÅ»¯:

ÔÚViewPath½ÚµãÖУ¬Ê¹ÓÃFragmentµÄÃû×ÖÌæ»»ViewType

¡¡¡¡ÓÅ»¯ºó,·¢Éúͼ2-4Ëùʾ½çÃæ²¼¾Ö¶¯Ì¬±ä»¯Ê±£¬¿Ø¼þ3µÄViewPath±ä»¯Îª£º

ViewTree¶¯Ì¬±ä»¯Ç°: RootView/FragmentB[0]
indexΪ0±íʾ´Ë½ÚµãÊÇÐֵܽڵãÖеÚÒ»¸öFragmentB
ViewTree¶¯Ì¬±ä»¯ºó: RootView/FragmentB[0]

¡¡¡¡ÈçÉÏ£¬´Ë´ÎÓÅ»¯Ê¹µÃ£¬ÔÚ¶¥²ãÊÓͼViewTypeÏàͬµÄFragment¶¯Ì¬Ìí¼Ó£¯É¾³ýµ½ViewTreeʱ£¬ViewPathÔڱ仯ǰºó±£³ÖÒ»Ö¡£

c. Õë¶Ô¿É¸´ÓÃViewµÄÓÅ»¯

Çé¾°

¡¡¡¡ÒÔ×ʹÓõÄListViewΪÀý£¬¼ÙÉèÓÐÒ»ListViewÂúÆÁÖ»ÏÔʾ3¸öÌõÄ¿£¬ÄÇô´ËListView¿ÉÄÜÖ»ÓÐ3¸ö×ӿؼþ£¨ItemView£©,¶ø´ËListViewÉÏ»¬Ö®ºó¿ÉÒÔÏÔʾ100ÏîÄÚÈÝ¡£

¡¡¡¡Õâ3¸öItemViewÓë100ÏîÄÚÈÝÊÇÒ»¶Ô¶àµÄ¶ÔÓ¦¹Øϵ£¬¶øÇÒÓ³Éä²¢ÎÞ¿É¿¿¹æÂÉ¡£

¡¡¡¡´Ëʱ£¬ÎÒÃÇÏ£ÍûViewPath¿ÉÒÔÇø·ÖÕâ100ÏîÏÔʾµÄÄÚÈÝÌõÄ¿£¬¶ø·Ç½ö½öÇø·Ö3¸öItemView¡£

ÉÏÃæÇé¾°ÖеÄÎÊÌâ¿ÉÓÃÏÂͼ±í´ï£º

ͼ2-5 ¿É¸´ÓÃViewµÄViewPathÇø·ÖÐÔÓÅ»¯

¡¡¡¡ÈçÉÏͼÖУ¬ÄÚÈÝÌõÄ¿1ºÍ4¶¼ÊÇÓÃitemView1À´³ÊÏֵģ¬°´ÕÕ֮ǰµÄViewPath¶¨Ò壬ͼ2-5Öи÷¸öÄÚÈÝÌõÄ¿µÄViewPathÈçÏ£º

ÄÚÈÝÌõÄ¿1: ListView/ItemView[0]   
indexΪ0±íʾ´Ë½ÚµãÊÇÐֵܽڵãÖеÚÒ»¸öItemView
ÄÚÈÝÌõÄ¿4: ListView/ItemView[0]
ÄÚÈÝÌõÄ¿2: ListView/ItemView[1]
ÄÚÈÝÌõÄ¿3: ListView/ItemView[2]

¡¡¡¡¿ÉÒÔ¿´³öÄÚÈÝÌõÄ¿1ºÍ4µÄViewPathÇø·Ö²»¿ª¡£´ËÖÖÎÊÌâ¿ÉÒÔ×ܽáΪ£º

ÏÔʾÄÚÈÝÓëViewTreeÖеĿؼþ²»ÊÇÒ»Ò»¶ÔÓ¦µÄÇé¿öÔì³É»ùÓÚViewTreeµÄViewPathÇø·Ö¶È²»¹»

1.¿É¸´ÓÃView,±ÈÈ磺ListView,RecyclerView,SpinnerµÈ£¬³ÊÏÖ³öÀ´×ÓViewµÄÊýÄ¿ºÍʵ¼Ê×ÓViewµÄÊýĿδ±ØÒ»ÖÂ

2.ViewPagerÉèÖûº´æÒ³ÃæÊýΪ1£¬µÚ¶þÒ³ÏÔʾʱ£¬µÚ¶þ¸öÒ³Ã涥¼¶ViewÆäʵÊÇViewPagerµÄµÚÒ»¸öChildView¡£´ËÖÖÇé¿öÒ²»áÔì³ÉÏÔʾÄÚÈÝ£¨µÚ¶þÒ³£©ÓëViewTreeÖеĿؼþ£¨µÚÒ»¸öChildView£©²»¶ÔÓ¦µÄÇé¿ö¡£

Òò´ËÎÒÃǶÔÓÚViewPath×÷ÈçÏÂÓÅ»¯£º

ViewPath½ÚµãµÄindexÈ¡ÄÚÈݵĵڼ¸Ï¶ø·ÇµÚ¼¸¸öItemView¡£

ÓÅ»¯£º

ÓÅ»¯ºóͼ2-5Öи÷¸öÄÚÈÝÌõÄ¿µÄViewPathÈçÏ£º

ÄÚÈÝÌõÄ¿1: ListView/ItemView[0]   
indexΪ0±íʾ´Ë½ÚµãÊÇListViewÏÔʾµÄ
µÚÒ»¸öÄÚÈÝÌõÄ¿
ÄÚÈÝÌõÄ¿4: ListView/ItemView[3]
ÄÚÈÝÌõÄ¿2: ListView/ItemView[1]
ÄÚÈÝÌõÄ¿3: ListView/ItemView[2]

¿É¼û£¬Ö®Ç°ViewPathÎÞ·¨Çø·ÖµÄÄÚÈÝÌõÄ¿1ºÍ4ÏÖÔÚ¿ÉÒÔÇø·Ö¿ªÁË¡£¸÷Öֿɸ´ÓÃViewÈ¡ÄÚÈݵĵڼ¸ÏîµÄ´úÂë·½·¨ÈçÏ£º

ListView,SpinnerµÈAdapterVie
ListView.getPositionForView(itemView)
RecyclerView- -RecyclerView.getChildAdapterPositi (itemView)
ViewPager ------ViewPager.getCurrentItem()

d. ViewPathÆðµãÓÅ»¯

Ò»¸öʵ¼ÊÖеÄViewPathÈçÏ£º

DecorView/LinearLayout[0]/Fram
eLayout[0]/
ActionBarOverlayLayout[0]/Content
FrameLayout[0]
/FrameLayout[0]/LinearLayout[0]
/ViewPager[0]/
ButtonFragment[0]/AppCompatButton[0]

¡¡¡¡ÉÏÃæµÄ¡°ContentFrameLayout[0]¡±Õâ¸ö½Úµã´ú±íµÄ¾ÍÊÇContentView£¬³ÌÐòÔ±ÔÚxml»òÕß´úÂëÀïÃæ¹¹½¨µÄView¶¼ÔÚContentViewÖС£

¡¡¡¡´ÓDecorViewµ½¡°ContentFrameLayout[0]¡±µÄÕâÒ»¶ÎPathÊÇAndroidϵͳFramework²ã¾ö¶¨µÄ,ÀíÂÛÉÏÓ¦¸ÃÊÇÒ»Öµģ¬µ«ÊÇÓÉÓÚËéƬ»¯µÈÔ­Òò¿ÉÄÜViewPathµÄÕâÒ»¶Î·¢Éú±ä»¯£®ÔÚʵ¼ùÖУ¬ÎÒÃÇÒ²·¢ÏÖȷʵÓÐһЩRom·¢ÉúÁË´ËÀàÇé¿ö£¬µ«ÊDZÈÂʺÜС£®

¡¡¡¡ÎªÁËÆÁ±ÎÕâÖÖ¿ÉÄÜÔì³Éͬһ¸öViewÔÚ²»Í¬É豸ÉϲúÉúViewPath²»Í¬µÄÇé¿ö£¬ViewPathµÄÆðµã¶¨ÒåÔÚContentView±È½ÏºÃ£®ÈçÉÏÃæµÄViewPath¿ÉÓÅ»¯Îª£º

ContentView/FrameLayout[0]/LinearLayout[0]/
ViewPager[0]/ButtonFragment[0]/AppCompat
Button[0]#mybutton

×ö·¨£º

¡¡¡¡¹¹Ôìÿһ¸öViewPath½Úµãʱ¿ÉÒÔÈ¡view.getId()£¬¿´¿´idµÄpackageId²¿·ÖÊDz»ÊÇϵͳµÄ£¨ÏµÍ³×ÊÔ´idÒÔ16½øÖƵÄ0x01,0x00¿ªÍ·£©£¬Èç¹ûÊÇ£¬Éú³ÉViewPathʱÆÁ±ÎÕâ¶Î¼´¿É£®

Èý¡¢Ò³ÃæµÄ»®·Ö

3.1 ºÏÀí»®·ÖÒ³ÃæµÄÖØÒªÐÔ

¡¡¡¡Ò³ÃæÔÚAndroidÖжÔÓ¦ÓÚActivityºÍ²¿·ÖFragment(±ÈÈçºÜ¶àappÊ×Ò³¶àtabµÄÉè¼Æ£¬Èôÿ¸ötabÊÇʹÓÃFragmentʵÏÖµÄ,ÄÇôÕâÖÖtabÒ»°ã¿´×÷Ò»¸öÒ³Ãæ)£®Ò³ÃæµÄ»®·ÖºÜÖØÒª£¬ÒòΪÁ½µã£º

¶ÔÓÚÒ³Ã棬ÐèÒª»ñÈ¡Show/HideÁ½¸öʱ»ú£¬ÔÚ´Ëʱ»úÉϱ¨Ò³ÃæShow/Hideʼþ,·ÇÒ³ÃæÔò²»ÐèÒª

Ò³ÃæµÄ»®·Ö¹Øϵ×ÅÓû§½»»¥Ê¼þµÄËùÊô£¬ÀýÈ磬°´Å¥µã»÷ʼþÉϱ¨¸ñʽÈçÏ£º

¡¡¡¡±í¸ñÖеģ¢ËùÊôÒ³Ã棢¼´±íʾ´Ë´Î°´Å¥µã»÷ʼþ·¢ÉúÔÚMainActivityÖУ®½«½»»¥Ê¼þ¹éÊôÓÚÒ³ÃæÕâÑù¶ÔºóÃæÎÞÂÛÊǽøÐз¾¶·ÖÎö»¹ÊÇͳ¼Æ¿Ø¼þµã»÷Á¿·Ö²¼¶¼ÓкܴóµÄºÃ´¦£®

3.2 AndroidÖеÄÒ³Ãæ

¡¡¡¡AndroidÖÐͨ³£ÐèÒª¿´×÷Ò³ÃæµÄÓÐActivityºÍFragment(¶ÔÓÚÏñÈ«ÆÁDialog»òÕßÈ«ÆÁµÄViewÔݲ»¿¼ÂÇ)£®¶ÔÓÚActivity£¬ÉϽÚÖÐÌáµ½µÄÁ½µã¶¼ºÜÈÝÒ×°ìµ½.

a. ActivityÒ³Ãæ

´ÓApplication.ActivityLifecycleCallbacksµÄonActivityResumed£¯onActivityPausedÕâÁ½¸ö»Øµ÷·½·¨¾Í¿ÉÒÔ·Ö±ðµÃµ½ActivityÒ³ÃæShow/HideµÄʱ»ú£¬²¢ÔÚ´Ëʱ»úÉϱ¨ÏàÓ¦Ò³Ãæʼþ

½»»¥¹éÊôµÄActivityÒ³Ãæ¿ÉÒÔͨ¹ýContextÇáËÉ»ñµÃ£¬ÀýÈçÉÏƪÎÄÕÂ<<Android AOPÖ®×Ö½ÚÂë²å×®>>Ìáµ½£¬µ±°´Å¥µã»÷ʱ£¬»á´¥·¢ÎÒÃDzå×®µÄ´úÂ룺

Monitor.onViewClick(view)

b. fragmentÒ³Ãæ

¡¡¡¡Ïà¶ÔÓÚActivity£¬½«Ä³Ð©Fragment¿´×÷Ò³ÃæµÄÂß¼­¾ÍÒªÉÔ΢¸´ÔÓһЩÁË£®ÕâÀïÃæÉæ¼°ÏÂÃ漸¸öÎÊÌ⣺

ÄÄЩFragment¿ÉÒÔÐèÒª¿´×÷Ò³Ã棿

¡¡¡¡ÕâÊÇÐèÒªÈ˹¤¾ö²ßµÄ£¬»úÆ÷×ö²»ÁËÕâ¸ö¾ö¶¨£®

¡¡¡¡Ä¿Ç°ÎÒÃÇÕâ¸öÈ˹¤¸ÉÔ¤Êǽ»¸øÓû§Ñо¿ÍŶӣ¬ËùÓÐFragment½ØͼµÈÐÅÏ¢¾ùչʾÔÚƽ̨ÉÏ£¬ÓÉÓÃÑÐͬÊÂÑ¡ÔñÐèÒª¿´×÷Ò³ÃæµÄÄÇЩ£¬ÓÃÑÐÑ¡ÔñµÄ½á¹û½«×Ô¶¯»¯ÅäÖõ½SDKÖУ®

ÈçºÎµÃµ½FragmentÒ³ÃæµÄShow/HideÒ³Ãæʼþ£¿

¡¡¡¡ÓÉÓÚfragmentʹÓó¡¾°±È½Ï¶àÑù£¬µ¥µ¥ÒÀ¿¿OnResume/OnPauseÁ½¸ö»Øµ÷±íʾfragment Show/HideÊDz»×¼È·µÄ,±ÈÈ磺

³¡¾°Ò»£º

¡¡¡¡Ê×Ò³Ò»¸öActivity³ÐÔضà¸öFragment TabµÄÇé¿ö£¬´Ëʱtab¼äÇл»²¢²»»á´¥·¢FragmentµÄOnResume/OnPause£®´¥·¢µÄ»Øµ÷º¯ÊýÊÇonHiddenChanged(boolean hidden)

³¡¾°¶þ£º

¡¡¡¡Ò»¸öViewPager³ÐÔضà¸öÒ³ÃæµÄFragmentʱ

¡¡¡¡¡¡¡¡a.µ±µÚÒ»¸öFragment1ÏÔʾʱ£¬ËäÈ»µÚ¶þ¸öFragment2´ËʱÉÐδÏÔʾ£¬µ«ÊÇFragment2µÄOnResumeÈ´ÒÔ¼°Ö´ÐУ¬´¦ÓÚresumedµÄ״̬£®

¡¡¡¡¡¡¡¡b.ViewPagerÒ³ÃæÇл»OnResume/OnPause/onHiddenChanged¾ùδ´¥·¢£¬´¥·¢µÄ»Øµ÷ÊÇsetUserVisibleHint

¡¡¡¡´ËʱÅжÏFragment¡¡Show/HideÓ¦¸ÃÓÃsetUserVisibleHint£¬¶ø·ÇOnResume/OnPause

¡¡¡¡ÈçǰһƪÎÄÕÂXXX,ËùÊö£¬ÎÒÃÇͨ¹ý²å×®µÄ·½Ê½Hookµ½ÁËfragmentµÄÈçÏÂÉúÃüÖÜÆÚº¯ÊýÓÃÓÚ°ü×°³ÉΪShow/Hideʼþ£º

onResume()
onPause()
onHiddenChanged(boolean hidden)
setUserVisibleHint(boolean isVisibleToUser)

ʹÓÃÕ⼸¸ö»Øµ÷°ü×°³ÉÊÊÓÃÓÚ¸÷ÖÖÇé¾°µÄFragmentShow/HideʼþµÄα´úÂëÈçÏ£º

//´ÓViewÖÐÀûÓÃcontext»ñÈ¡ËùÊôActivity
µÄÃû×Öpublic static String getActiv
ityName(View view) {
Context context = view.getContext();
if (context instanceof Activity) {
//context±¾ÉíÊÇActivityµÄʵÀý
return context.getClass().ge tSimpleName().;
} else if (context instanceof ContextWrapper) {
//ActivityÓпÉÄܱ»ÏµÍ³£¢×°ÊΣ¢ £¬¿´¿´context. baseÊDz»ÊÇActivity
Activity activity = getActivity FromContext Wrapper((ContextWrapper) context);
if (activity != null) {
return activity.getClass(). getSimpleName();
} else {
//Èç¹û´Óview.getContext()Äà ²»µ½ActivityµÄ ÐÅÏ¢£¨±ÈÈçviewµÄcontextÊÇApplication£© ,Ôò·µ»Øµ± Ç°Õ»¶¥ActivityµÄÃû×Ö
return currentActivityName;
}
}
return "";
}

 

ÈçºÎ½«FragmentÄÚ²¿µÄ½»»¥¹éÊôµ½FragmentÒ³Ã棬Ҳ¾ÍÊÇ˵ÈçºÎÔÚ½»»¥·¢Éúʱ´ÓviewʵÀýÄõ½FragmentÒ³ÃæµÄÃû×Ö£¨Ïñ֮ǰÄõ½ActivityÒ³ÃæÃû×ÖÒ»Ñù£©£¿

¡¡¡¡view¿ÉÒÔͨ¹ýcontextÄõ½ActivityµÄÐÅÏ¢£¬µ«ÊÇȴûÓÐ;¾¶Äõ½fragmentµÄÒýÓá£ÄÇô£¬µ±Ä³¸öView½»»¥·¢Éú£¬ÎÒÃÇÓÖÐèÒª»ñÈ¡FragmentÒ³ÃæÃû×ÖµÄÇé¿öÏ£¬ÎÒÃÇÖ»ÄÜÊÂÏȽ«FragmentÒ³ÃæÃûдÈë´ËViewµÄÊôÐÔÖС£

¡¡¡¡×ö·¨´óÖÂÈçÏ£º

¡¡¡¡¡¡¡¡a. °´ÕÕǰһƪÎÄÕÂxxxÀïÃæµÄ·½·¨£¬ÔÚFragment.OnCreateView·½·¨µÄ½áβ²å×®£¬Äõ½returnµÄview£¨¼´Îª´ËFragmentµÄ¶¥²ãÊÓͼ£©

¡¡¡¡¡¡¡¡b. ÅжϴËFragmentÊÇ·ñ±»Ö¸¶¨ÎªFragmentÒ³Ãæ,Èç¹ûÊÇ£¬ÏÂÒ»²½

¡¡¡¡¡¡¡¡c.±éÀúÒÔFragmentµÄ¶¥²ãÊÓͼΪ¸ù½ÚµãµÄViewTree, ½«FragmentÃûÉèÖõ½´ËViewTreeµÄÿһ¸öviewÉÏ¡£ÉèÖ÷½·¨ÈçÏÂËùʾ£º

view.setTag(0xff000001, fragmentName);

×¢Ò⣺ViewÀàÓÐÁ½¸öÃûΪsetTagµÄ·½·¨£º

public void setTag(final Object tag)

¡¡¡¡´Ë·½·¨£¬ÀàÄÚ²¿ÓÃÒ»Object¶ÔÏó´æ´¢tag£¬protected Object mTag = null;¡£listAdapterÖг£ÓÃÓÚÉèÖÃholder¡£ÎÒÃÇ´Ë´¦ÓõIJ»ÊÇÕâ¸ö£¬²»»áÓÚ´ËÓ÷¨³åÍ»

view.setTag(0xff000001, fragmentName);

¡¡¡¡´Ë·½·¨£¬ÀàÄÚ²¿ÓÐһϡÊèÊý×é´æ´¢tag£¬private SparseArray<Object> mKeyedTags;

¡¡¡¡tagµÄkey¹Ù·½ÍƼö×ÊÔ´id£¬Òò´ËÎÒÃÇ¿ÉÒÔÑ¡ÓÃÀàËÆ0xff000001Ö®ÀàµÄappÓò»µ½µÄ×ÊÔ´id½øÐÐtag´æ´¢ÒÔ±ÜÃâ³åÍ»¡£

¡¡¡¡¡¡¡¡d. µ±ÐèҪʹÓÃFragmentÃûʱ£¬Èçϵ÷Óü´¿É»ñµÃ£º

public void setTag(final Object tag)

3.3 Ò³ÃæÃû×é³É

Ç°Ãæ½²Á˽«½»»¥Ê¼þ£¨±ÈÈçµã»÷ʼþ£©¹éÊôµ½Ä³Ò»¸öÒ³ÃæµÄ·½·¨ÊÇ£º

ÔÚ½»»¥Ê¼þÖÐÉèÖÃÒ»¸ö×ֶΣ¬ÖµÎªÒ³ÃæÃû³Æ¡£

Ò³Ãæ¿ÉÒÔÊÇActivity»òÕßActivity³ÐÔصÄFragment£¬ÎÒÃǵÄÒ³ÃæÃû³Æ×é³ÉÈçÏ£º

public void setTag(int key, final Object tag)

˵Ã÷ÈçÏ£º

1.¡°[]¡±ÄÚµÄ×é³É²¿·ÖÊÇ¿ÉÑ¡µÄ£¬¿ÉÄÜÓпÉÄÜûÓС£ÁíÍ⣬¸÷¸ö×é³É²¿·ÖÖ®¼äÓзָô·û·Ö¸î¡£

2.Ò³ÃæÃû×é³ÉÖУ¬ActivityµÄÃèÊö£¨ÀàÃû/±ðÃû£©ÊǵÚÒ»²ã£¬FragmentµÄÃèÊö£¨ÀàÃû/±ðÃû£©Êǵڶþ²ã

3.±ðÃûµÄ³öÏÖÊÇΪÁ˽â¾öµ¥´¿ÒÀÀµÀàÃûÎÞ·¨¾«È·Çø·ÖÒ³ÃæµÄijЩÇé¿ö£¬±ÈÈ磺

ÔÚij¸öµçÉÌÓ¦ÓÃÖУ¬¡°ÉÌÆ·ÏêÇéÒ³¡±£¨Í¬Ò»¸öActivity£©ÓÃÓÚչʾ¸÷ÖÖÉÌÆ·£¨iphone,µçÊӵȣ©£¬Èç¹ûÐèÒª°Ñ¡°²»Í¬ÉÌÆ·µÄÉÌÆ·ÏêÇéÒ³¡°Çø·Ö³É²»Í¬Ò³ÃæÀ´Í³¼ÆpvµÈÖ¸±êµÄ»°£¬ÐèÒªÉèÖñðÃû£¬È磺

¶ÔÓÚ±ðÃûµÄÉèÖã¬ÐèÒª³ÌÐòÔ±ÔÚÒµÎñ´úÂëÀïÃ棨ÈçActivity.OnCreate,Fragment.onCreateµÈ£©ÏÔʽÉèÖÃ.

ËÄ¡¢ÎÞÐèÂñµãÇáËÉÊÕ¼¯¶¨ÖƵÄÒµÎñÊý¾Ý

4.1 ÅäÖÃʾÀý

¡¡¡¡Ö®Ç°Ìáµ½¹ý£¬Êý¾ÝÊÕ¼¯SDK¿ÉÒÔͨ¹ýÅäÖÃÏ·¢¼´Ê±ÊÕ¼¯¶¨ÖƵÄÊý¾Ý£¬ÄÇôÔÚAndroid¶ËÕâ¸öÊÇÔõô×öµ½µÄÄØ£¿

Ê×ÏÈ£¬¿´Ò»ÏÂÏ·¢µÄÅäÖÃÑùÀý:

ÉÏÃæÀý×Ó·­Òë³ÉÊý¾ÝÐèÇó¾ÍÊÇ£º

1. µ±Ò³Ãæ(MainActivity)

2. ÖеĿؼþ£¨DecorView/.../ViewPager [0]/ ButtonFragment[0] / AppCompatButton[0]£©

3. ·¢Éúµã»÷ʼþ£¨ViewClick£©Ê±

4. °´ÕÕ·¾¶£¨this.context.demoList[5]£©È¡³öÊý¾Ý

5. ²¢¸½¼Óµ½µã»÷ʼþÉÏÃæÒ»ÆðÉϱ¨

°´ÕÕÕâ¸öÃèÊö£¬ÎÒÃÇ»¹¿ÉÒÔÃèÊöÈçϵȵȸ÷ÖÖÊý¾ÝÐèÇó£º

µ±(ijҳÃæ)·¢Éúʼþ£¨Show£©Ê±£¬°´ÕÕ·¾¶£¨xxx£©È¡³öÊý¾Ý£¬²¢¸½¼Óµ½Ò³ÃæShowʼþÉÏÃæÒ»ÆðÉϱ¨

×ܽáÏÂÃèÊöµÄ×é³É²¿·Ö£¬ÈçÏ£º

4.2 ÎÞÂñµãÊÕ¼¯Á÷³Ì

¡¡¡¡ÉϽÚչʾÁËÓÃÓÚÎÞÂñµã¶¨ÖÆÒµÎñÊý¾ÝÊÕ¼¯µÄÅäÖã¬ÄÇôSDKÊÕµ½ÕâÑùµÄÒ»·ÝÅäÖÃÈçºÎ×îÖÕ°ÑÏëÒªµÄÊý¾ÝÊÕ¼¯ÉÏÀ´ÄØ£¿

1.²½ÖèÒ»£º²úÉúԭʼʼþ¡£±ÈÈçµã»÷ʱÊÕ¼¯£¬µ±µã»÷ʱ»á´¥·¢ÎÒÃDzå×®µÄ´úÂ룬²¢Éú³ÉԭʼµÄµã»÷ʼþ

Monitor.onViewClick(view)

2.²½Öè¶þ£ºÆ¥ÅäÅäÖÃ

ÔÚonViewClick·½·¨ÖÐÆ¥ÅäÏ·¢µÄÅäÖÃÐÅÏ¢£¬¿´¿´Page,ViewPathÊÇ·ñÓ뵱ǰviewÆ¥Å䣬EventTypeÊÇ·ñÓ뵱ǰʼþÀàÐÍÆ¥Å䣬ÈôÆ¥ÅäÔò½øÐÐÏÂÒ»²½

×¢£ºViewPathµÄÆ¥Åä¿ÉÒÔÓо«È·Æ¥ÅäºÍÄ£ºýÆ¥Å䣬¾«È·Æ¥Åäʱһ¸öViewPath¾«È·Æ¥ÅäΨһһ¸ö¿Ø¼þ£®Ä£ºýÆ¥Åäʱһ¸öViewPath¿ÉÆ¥Åä¶à¸ö¿Ø¼þ£¬ÀýÈç¿ÉÒÔÓÃÓÃÒ»¸öViewPathÄ£ºýÆ¥ÅäÒ»¸öÁбíÖеÄËùÓÐÌõÄ¿£®

3.²½ÖèÈý£º°´ÕÕÊý¾Ý·¾¶£¨DataPath£©Ö𼶷´ÉäÄõ½Ä¿±êÊý¾Ý£¬²¢½«ÕÒµ½µÄÊý¾Ý¸½ÔÚԭʼµÄµã»÷ʼþÉϽøÐÐÉϱ¨¡£

4.3 Êý¾Ý·¾¶£¨DataPath£©

¡¡¡¡ÉÏÊö²½ÖèÈý½øÐÐÊý¾ÝÊÕ¼¯Ö÷ÒªÊÇ°´ÕÕDataPathµÄÃèÊö½øÐУ¨ÀýÈçʾÀýÖÐÌáµ½µÄ£¢this.context.demoList[5]£¢£©£¬DataPathÊÇÒ»ÖÖÎÒÃÇÓÃÓÚÊÕ¼¯¶¨ÖÆÊý¾Ý¶ø¶¨ÒåµÄÒ»ÖÖDSL£®º¬ÒåÈçÏ£º

a. º¬Òå

DataPath: Ö¸ÏòÒªÊÕ¼¯µÄÄ¿±êÊý¾ÝµÄÒ»ÌõÒýÓ÷¾¶£¬½âÎö´Ë·¾¶²¢Ö𼶷´Éä×îÖÕÄõ½Ä¿±êÊý¾Ý£®

¡¡¡¡DataPathд·¨ÖеÄһЩ¹Ø¼ü×Ö(·û)£º

b. Ó¦ÓÃʾÀý

¡¡¡¡ÏÂÃæÓÃÁ½¸öÀý×Ó˵Ã÷ÈçºÎ´ÓDataPathÕÒµ½Ä¿±êÊý¾Ý£®

ͼ£´-1 DataPathʾÀý

ʾÀý£±£ºÁбíÊý¾Ý»ñÈ¡

¡¡¡¡ÉÏͼÖÐÏÔʾÊÇÒ»¸öÁÐ±í£¬ºì¿òÖÐÊÇÁбíµÄµÚÒ»¸öÌõÄ¿£®ÄÇô£¬Èç¹ûÎÒÃÇÏëÒªÔÚÁбíÖÐÌõÄ¿µã»÷ʱ£¬½«ÁбíչʾµÄ½»Ò×Æ·ID(»òÕߺÏ×÷·½ID)µÈ²»ÔÚ½çÃæÉÏÏÔʾ¶øÓÖ´æÔÚÓÚÄÚ´æÖеÄÊý¾Ý¸úËæµã»÷ʼþÉϱ¨£®´Ë´¦DataPath¸ÃÔõôд£¿

item.productId

¡¡¡¡DataPath½âÊÍ£º

Æðµã¶¨Îª£¢item£¢,Ôò±íʾ´Ó´ËListView(»òÕßRecylerView)°ó¶¨µÄAdapterÖе±Ç°Êý¾ÝitemΪÆðµãÈ¡Êý¾Ý£®

¼ÙÉè´ËListView°ó¶¨µÄAdapterÈçÏ£º

public class DemoAdapter extends BaseAdapter {
private ArrayList<DataItem> mDataItems;
......
}

Ôò´Ë´¦"item"´ú±íµÄ¾ÍÊÇmDataItems[x] (x±íʾµ±Ç°±»µã»÷ÌõÄ¿µÄitemId)

2.£¢productId£¢ÊÇmodelÀàDataItemÖбíʾ£¢½»Ò×Æ·ID£¢µÄ×Ö¶ÎÃû³Æ£®

¡¡¡¡Í¨¹ýDataPath»ñÈ¡Êý¾Ý£º

µ±µÚxÌõÄ¿±»µã»÷ʱ£¬Èç¹û·¢ÏÖÓÐÆ¥ÅäµÄÅäÖ㬶ÔÓÚÆðµãΪ"item"µÄDataPath£¬ÏÈͨ¹ýview.getParentÕÒµ½ÉϲãListViewʵÀý£¬È»ºóͨ¹ýlistView.getAdapter()»ñµÃ°ó¶¨µÄAdapterʵÀý£¬×îºóͨ¹ýAdapter.getItem(ListView.getPositionForView(itemView))µÃµ½Êý¾ÝÖеÚx¸öitem,¼´mDataItems[x]

·´Éä»ñÈ¡mDataItems[x]ÖеÄproductId×ֶΣ¬¼´¿ÉµÃµ½µÚx¸öÌõÄ¿µÄ£¢½»Ò×Æ·ID£¢,½«´ËID¸úËæµÚxÌõÄ¿µÄµã»÷ʼþ½øÐÐÉϱ¨¼´¿É£®

ʵÀý£²£º½çÃæÊý¾Ý»ñÈ¡

¡¡¡¡Í¬Ñùʱͼ4-1Ëùʾ£¬¼ÓÈëÎÒÃÇÏëÔÚÁбíÖÐÌõÄ¿µã»÷ʱ£¬½«ÌõÄ¿ÖÐչʾµÄ"×îмÛ"¸úËæµã»÷ʼþÉϱ¨£®´Ë´¦DataPath¸ÃÔõôд£¿

¡¡¡¡ºì¿òËùʾViewTree×ÓÊ÷ÈçÏ£º

ͼ4-2 ÁбíItem ViewTree×ÓÊ÷½á¹¹

¡¡¡¡ÈçÉÏͼ£¬Ñ¡Öв¿·ÖÊÇÁбíµÄItemView£¨RelativeLayout£©,¿É¼û"×îмÛ"ÊÇÓÉindexΪ2µÄTextViewËùչʾ£¬Óɴ˿ɵã¬ÁбíÖÐÌõÄ¿µã»÷»ñÈ¡"×îмÛ"Êý¾ÝµÄDataPathÈçÏ£º

this.childAt(2).mText

¡¡¡¡DataPath½âÊÍ£º

1.ÆðµãΪ£¢this£¢,±íʾµ±Ç°±»µã»÷µÄviewʵÀý£¨Í¼4-2Öб»Ñ¡ÖеÄRelativeLayout£©

2."childAt(2)"±íʾRelativeLayout.getChildAt(2),µÃµ½Í¼4-2ÖÐindexΪ£²µÄTextView

3."mText" ±íʾȡ³ö²½Ö裲Öеõ½TextViewʵÀýµÄmText×ֶΣ¨TextView¿Ø¼þÏÔʾµÄÎÄ×ÖÄÚÈÝ´æ´¢ÔÚmText×Ö¶ÎÄÚ£©

4.½«È¡³öµÄ½çÃæÉÏÏÔʾµÄ"×îмÛ"Êý¾ÝÌí¼Óµ½Ô­Ê¼µã»÷ʼþÖУ¬Ò»ÆðÉϱ¨£®

c. DataPath×¢ÒâÊÂÏ

£±£®»ìÏý£®

¡¡¡¡ÓÉÓÚDataPath±¾ÖÊÉÏÃèÊöµÄʱÄÚ´æÖеģ¢ÒýÓ÷¾¶£¢£¬²¢ÇÒ°´ÕÕDataPathÈ¡Êý¾ÝʱÓÃÁË·´ÉäµÄ·½·¨£¬Òò´ËDataPathÓ¦¸ÃÃèÊöµÄÊÇ»ìÏýÖ®ºóµÄ£¢ÒýÓ÷¾¶£¢£®

¡¡¡¡ËäÈ»DataPath¿ÉÄÜÊܵ½»ìÏýµÄÓ°Ï죬µ«ÊÇ

* ÓÃÓÚ´æ´¢Êý¾ÝµÄmodelÀàͨ³£ÊDz»±»»ìÏýµÄ£®ÈçÎÒÃÇ֮ǰµÄitem¹Ø¼ü×ÖÖ±½Ó½«ÆðµãÉèÖÃΪÁбíÌõÄ¿µÄmodelÀà¶ÔÏ󣬲»ÊÜ»ìÏýÓ°Ï죮

* ͨ¹ý¹Ø¼ü×Öparent£¯childAt(x)¿ÉÒÔÔÚÊÓͼµÄÒýÓÃÖв»ÊÜ»ìÏýÓ°Ïì

* ½Ó¿ÚµÄ·½·¨Í¨³£²»ÊÜ»ìÏýÓ°Ï죮Òò´ËÔÚDataPathÖжàÓýӿڷ½·¨µ÷ÓÃ

¡¡¡¡Òò´Ë¿ª·¢ÔÚÅäÖÃDataPathʱӦ¾¡Á¿ÓÃÉÏÊö²»±»»ìÏýÓ°ÏìµÄ×ֶμ°·½·¨£®µ«ÊÇ£¬Èç¹ûÕæµÄÓõ½ÁË»ìÏý¹ýµÄ×Ö¶ÎÔõô°ì£®ÎÒÃǵķ½°¸ÊÇ£º

Êý¾Ý±¨¾¯

¡¡¡¡±ÈÈç°æ±¾£±ÉÏÅäÖõÄDataPath "a.b",ÔÚÉý¼¶Ð°汾£²ºó²»ÔÙÊÊÓã¬Ôòа汾£²°´ÕÕ£¢a.b£¢ÊÕ¼¯Ê±½«ÊÕ¼¯²»µ½£¬²úÉú±¨¾¯ÐÅÏ¢µ½ºǫ́£®ºǫ́ÊÕµ½´óÁ¿´ËÖÖÐÅÏ¢»áÌáÐÑ¿ª·¢ÎªÐ°汾ÅäÖÃÊÊÓÃа汾µÄDataPath£®

£²£®´úÂë±ä»¯µ¼ÖÂÒýÓ÷¾¶±ä»¯£¬´Ó¶øÖÂʹ֮ǰÅäÖõÄDataPathʧЧ£®

¡¡¡¡Óë´úÂëÖÐÂñµãÏà±È£¬ÏßÉÏÅäÖýøÐÐÊÕ¼¯Êý¾ÝÓë´úÂëµÄ±ä»¯ÊDz¢Ðеģ¬Î޹صģ®Õâ¾ÍÓпÉÄÜÔì³ÉÔ­ÓдúÂëÐ޸ĵ¼ÖÂDataPathʧЧ£®ÆäʵÈç¹û¿Í»§¶Ë¼Ü¹¹Éè¼ÆºÏÀí£¬¹¦Äܵü´ú¸ü¶àÊÇÔÚ½øÐдúÂëµÄÀ©Õ¹£¬¶ø·ÇÐ޸ģ¬ÕâÖÖµ¼ÖÂDataPathʧЧµÄÇé¿öÓ¦¸Ã»á´ó´ó½µµÍµÄ£®

¡¡¡¡µ«ÊÇÎÞÂÛÈçºÎ£º

ÅäÖõÄDataPath°ÚÍѲ»ÁËÓë°æ±¾µÄÏà¹ØÐÔ

¡¡¡¡¶ÔÓÚ´ËÖÖÎÊÌâÎÒÃÇÒÀÈ»ÊÇͨ¹ýÇ°ÃæÌáµ½µÄ£¢Êý¾Ý±¨¾¯£¢½øÐмà¿Ø¼°±ÜÃâµÄ£®

Îå¡¢½áÓï

¡¡¡¡×ÛÉÏ£¬±¾ÎĽéÉÜÁËÊý¾ÝÊÕ¼¯Âß¼­ÖУ³¸ö±È½Ï¹Ø¼üµÄµã£¨ViewID/Page/DataPath£©£¬½áºÏÉÏһƪÎÄÕµÄ(AOPÔ­Àí)£¬Android¶ËÎÞÂñµãÊý¾ÝÊÕ¼¯¼¼ÊõÉϱȽϹؼüµÄµã½ÔÒÔ×ܽáÍê±Ï£®

¡¡¡¡µ±È»ÊµÏÖSDK¹ý³ÌÖÐÔâÓö¹ýºÜ¶à±È½ÏÓÐÒâ˼µÄ¼¼ÊõÎÊÌ⣬ºóÐøÒ²»á½Ðø½øÐÐÕûÀí£®

 

   
3826 ´Îä¯ÀÀ       19
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼Æʵ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆʵÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ