@@ -9,6 +9,7 @@ import android.content.ComponentName;
 
			
		
	
		
		
			
				
					
					import   android.content.Context ; import   android.content.Context ;  
			
		
	
		
		
			
				
					
					import   android.content.Intent ; import   android.content.Intent ;  
			
		
	
		
		
			
				
					
					import   android.content.ServiceConnection ; import   android.content.ServiceConnection ;  
			
		
	
		
		
			
				
					
					import   android.os.Bundle ;  
			
		
	
		
		
			
				
					
					import   android.os.IBinder ; import   android.os.IBinder ;  
			
		
	
		
		
			
				
					
					import   android.os.Looper ; import   android.os.Looper ;  
			
		
	
		
		
			
				
					
					import   android.view.LayoutInflater ; import   android.view.LayoutInflater ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -53,9 +54,9 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					     private   static   final   int   DEFAULT_TASK_DISTANCE   =   100 ;      private   static   final   int   DEFAULT_TASK_DISTANCE   =   100 ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // 核心成员变量( : )       // 核心成员变量( : )   
			
		
	
		
		
			
				
					
					     private   final   ArrayList < PositionModel >   mPositionList ;      private   final   ArrayList < PositionModel >   mPositionList ;   // 数据源:   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					     private   final   ArrayList < PositionTaskModel >   mAllPositionTasks ;      private   final   ArrayList < PositionTaskModel >   mAllPositionTasks ;  
			
		
	
		
		
			
				
					
					     private  final    Context   mContext ;      private   Context   mContext ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					     private   PositionModel   mCurrentGpsPosition ;      private   PositionModel   mCurrentGpsPosition ;  
			
		
	
		
		
			
				
					
					     private   final   Map < String ,   ArrayList < PositionTaskModel > >   mPositionTaskMap ;      private   final   Map < String ,   ArrayList < PositionTaskModel > >   mPositionTaskMap ;  
			
		
	
		
		
			
				
					
					     private   final   Map < String ,   TextView >   mVisibleDistanceViews   =   new   HashMap < String ,   TextView > ( ) ;      private   final   Map < String ,   TextView >   mVisibleDistanceViews   =   new   HashMap < String ,   TextView > ( ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -73,13 +74,13 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					             mDistanceService   =   binder . getService ( ) ;              mDistanceService   =   binder . getService ( ) ;  
			
		
	
		
		
			
				
					
					             isServiceBound   =   true ;              isServiceBound   =   true ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					             // 绑定服务后初始化:设置接收器+同步数据              // 绑定服务后初始化:设置接收器+同步数据( )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					             mDistanceService . setOnDistanceUpdateReceiver ( PositionAdapter . this ) ;              mDistanceService . setOnDistanceUpdateReceiver ( PositionAdapter . this ) ;  
			
		
	
		
		
			
				
					
					             mDistanceService . syncPositionList ( mPositionList ) ;              mDistanceService . syncPositionList ( mPositionList ) ;   // 关键:传递原列表引用  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					             mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;              mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;  
			
		
	
		
		
			
				
					
					             mDistanceService . syncCurrentGpsPosition ( mCurrentGpsPosition ) ;              mDistanceService . syncCurrentGpsPosition ( mCurrentGpsPosition ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					             // 同步已有的可见控件(解决“控件已添加但服务未收到”问题)               // 同步已有的可见控件  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					             Iterator < String >   posIdIterator   =   mVisibleDistanceViews . keySet ( ) . iterator ( ) ;              Iterator < String >   posIdIterator   =   mVisibleDistanceViews . keySet ( ) . iterator ( ) ;  
			
		
	
		
		
			
				
					
					             while   ( posIdIterator . hasNext ( ) )   {              while   ( posIdIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					                 String   positionId   =   posIdIterator . next ( ) ;                  String   positionId   =   posIdIterator . next ( ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -89,7 +90,6 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " DistanceRefreshService 绑定成功 " ) ;              LogUtils . d ( TAG ,   " DistanceRefreshService 绑定成功 " ) ;  
			
		
	
		
		
			
				
					
					         }          }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
							 @Override 		 @Override  
			
		
	
		
		
			
				
					
							 public   void   onServiceDisconnected ( ComponentName   name )   { 		 public   void   onServiceDisconnected ( ComponentName   name )   {  
			
		
	
		
		
			
				
					
								 mDistanceService   =   null ; 			 mDistanceService   =   null ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -116,23 +116,23 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
						 private   OnSavePositionTaskClickListener   mOnSavePositionTaskClickListener ; 	 private   OnSavePositionTaskClickListener   mOnSavePositionTaskClickListener ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 构造函数( : , )  // 构造函数( : , )   
			
		
	
		
		
			
				
					
					     public   PositionAdapter ( Context   context ,   ArrayList < PositionModel >   positionList ,   ArrayList < PositionTaskModel >   allPositionTasks )   { 	 public   PositionAdapter ( Context   context ,   ArrayList   positionList ,   ArrayList   allPositionTasks )   {  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 this . mContext   =   context ; 		 this . mContext   =   context ;  
			
		
	
		
		
			
				
					
					// Java7: ( )  // Java7: ( )   
			
		
	
		
		
			
				
					
					         this . mPositionList   =   ( positionList   ! =   null )   ?   positionList   :   new   ArrayList < PositionModel > ( ) ; 		 this . mPositionList   =   ( positionList   ! =   null )   ?   positionList   :   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         this . mAllPositionTasks   =   ( allPositionTasks   ! =   null )   ?   allPositionTasks   :   new   ArrayList < PositionTaskModel > ( ) ; 		 this . mAllPositionTasks   =   ( allPositionTasks   ! =   null )   ?   allPositionTasks   :   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 this . mPositionTaskMap   =   new   HashMap < String ,   ArrayList < PositionTaskModel > > ( ) ; 		 this . mPositionTaskMap   =   new   HashMap < String ,   ArrayList < PositionTaskModel > > ( ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 初始化任务映射表( : )  // 初始化任务映射表( : )   
			
		
	
		
		
			
				
					
					         Iterator < PositionModel >   modelIterator   =   mPositionList . iterator ( ) ; 		 Iterator   modelIterator   =   mPositionList . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 while   ( modelIterator . hasNext ( ) )   { 		 while   ( modelIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					             PositionModel   model   =   modelIterator . next ( ) ; 			 PositionModel   model   =  ( PositionModel )  modelIterator . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 String   validPosId   =   model . getPositionId ( ) ; 			 String   validPosId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
					             ArrayList < PositionTaskModel >   matchedTasks   =   new   ArrayList < PositionTaskModel > ( ) ; 			 ArrayList   matchedTasks   =   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					             Iterator < PositionTaskModel >   taskIterator   =   this . mAllPositionTasks . iterator ( ) ; 			 Iterator   taskIterator   =   this . mAllPositionTasks . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 while   ( taskIterator . hasNext ( ) )   { 			 while   ( taskIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					                 PositionTaskModel   task   =   taskIterator . next ( ) ; 				 PositionTaskModel   task   =  ( PositionTaskModel )  taskIterator . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
									 if   ( task   ! =   null   & &   validPosId . equals ( task . getPositionId ( ) ) )   { 				 if   ( task   ! =   null   & &   validPosId . equals ( task . getPositionId ( ) ) )   {  
			
		
	
		
		
			
				
					
										 matchedTasks . add ( task ) ; 					 matchedTasks . add ( task ) ;  
			
		
	
		
		
			
				
					
									 } 				 }  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -193,45 +193,77 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 mVisibleDistanceViews . clear ( ) ; 		 mVisibleDistanceViews . clear ( ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // ---------------------- 服务消息接收(距离更新 )  // ---------------------- 服务消息接收(仅接收位置ID,  )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 @Override 	 @Override  
			
		
	
		
		
			
				
					
					     public   void   onDistanceUpdate ( final   String   positionId ,   final   String   distanceText ,   final   int   distanceColor   { 	 public   void   onDistanceUpdate ( final   String   positionId )   {  
			
				
				
			
		
	
		
		
			
				
					
					         // 保障主线程更新( : , )  // 保障主线程更新UI ( : )   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 if   ( Looper . myLooper ( )   ! =   Looper . getMainLooper ( ) )   { 		 if   ( Looper . myLooper ( )   ! =   Looper . getMainLooper ( ) )   {  
			
		
	
		
		
			
				
					
								 mUiHandler . post ( new   Runnable ( )   { 			 mUiHandler . post ( new   Runnable ( )   {  
			
		
	
		
		
			
				
					
										 @Override 					 @Override  
			
		
	
		
		
			
				
					
										 public   void   run ( )   { 					 public   void   run ( )   {  
			
		
	
		
		
			
				
					
											 updateDistanceView( p ositionId ,   distanceText ,   distanceColor ) ; 						 updateDistanceViewByP ositionId ( positionId ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 } 					 }  
			
		
	
		
		
			
				
					
									 } ) ; 				 } ) ;  
			
		
	
		
		
			
				
					
							 }   else   { 		 }   else   {  
			
		
	
		
		
			
				
					
					             updateDistanceView( p ositionId ,   distanceText ,   distanceColor ) ; 			 updateDistanceViewByP ositionId ( positionId ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 精准更新距离TextView( : , )   
			
		
	
		
		
			
				
					
					     */  
			
		
	
		
		
			
				
					
					     private   void   updateDistanceView ( String   positionId ,   String   distanceText ,   int   distanceColor )   {  
			
		
	
		
		
			
				
					
					         // 1. 检查核心参数(避免无效更新)  
			
		
	
		
		
			
				
					
					         if   ( positionId   = =   null   | |   distanceText   = =   null   | |   mVisibleDistanceViews . isEmpty ( ) )   {  
			
		
	
		
		
			
				
					
					             LogUtils . w ( TAG ,   " 更新距离失败: (  "   +   positionId   +   " ,距离文本= "   +   distanceText   +   " ) " ) ;  
			
		
	
		
		
			
				
					
					             return ;  
			
		
	
		
		
			
				
					
					         }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 2. 找到目标TextView 并更新	 - 核心修改: ,  并更新 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 */  
			
		
	
		
		
			
				
					
						 private   void   updateDistanceViewByPositionId ( String   positionId )   {  
			
		
	
		
		
			
				
					
					// 1. 前置校验(避免无效更新)  
			
		
	
		
		
			
				
					
							 if   ( positionId   = =   null   | |   mPositionList . isEmpty ( )   | |   mVisibleDistanceViews . isEmpty ( ) )   {  
			
		
	
		
		
			
				
					
								 LogUtils . w ( TAG ,   " 更新UI失败: (  "   +   positionId   +   " ) " ) ;  
			
		
	
		
		
			
				
					
								 return ;  
			
		
	
		
		
			
				
					
							 } // 2. 从mPositionList找到对应位置模型( : )   
			
		
	
		
		
			
				
					
							 PositionModel   targetModel   =   null ;  
			
		
	
		
		
			
				
					
							 Iterator   modelIter   =   mPositionList . iterator ( ) ;  
			
		
	
		
		
			
				
					
							 while   ( modelIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
								 PositionModel   model   =   ( PositionModel ) modelIter . next ( ) ;  
			
		
	
		
		
			
				
					
								 if   ( positionId . equals ( model . getPositionId ( ) ) )   {  
			
		
	
		
		
			
				
					
									 targetModel   =   model ;  
			
		
	
		
		
			
				
					
									 break ;  
			
		
	
		
		
			
				
					
								 }  
			
		
	
		
		
			
				
					
							 }  
			
		
	
		
		
			
				
					
							 if   ( targetModel   = =   null )   {  
			
		
	
		
		
			
				
					
								 LogUtils . w ( TAG ,   " 更新UI失败:  "   +   positionId   +   "  未找到对应模型 " ) ;  
			
		
	
		
		
			
				
					
								 return ;  
			
		
	
		
		
			
				
					
							 } // 3. 读取realPositionDistance,   
			
		
	
		
		
			
				
					
							 double   distanceM   =   targetModel . getRealPositionDistance ( ) ;  
			
		
	
		
		
			
				
					
							 String   distanceText ;  
			
		
	
		
		
			
				
					
							 int   distanceColor ; if   ( distanceM   = =   - 1 )   {  
			
		
	
		
		
			
				
					
					// 距离为-1:   
			
		
	
		
		
			
				
					
								 if   ( targetModel . isEnableRealPositionDistance ( ) )   {  
			
		
	
		
		
			
				
					
									 distanceText   =   " 实时距离:计算异常 " ;  
			
		
	
		
		
			
				
					
									 distanceColor   =   getColorRes ( R . color . colorRed ) ;  
			
		
	
		
		
			
				
					
								 }   else   {  
			
		
	
		
		
			
				
					
									 distanceText   =   " 实时距离:未启用 " ;  
			
		
	
		
		
			
				
					
									 distanceColor   =   getColorRes ( R . color . colorGrayText ) ;  
			
		
	
		
		
			
				
					
								 }  
			
		
	
		
		
			
				
					
							 }   else   {  
			
		
	
		
		
			
				
					
					// 距离有效:格式化显示(米/千米)  
			
		
	
		
		
			
				
					
								 if   ( distanceM   <   1000 )   {  
			
		
	
		
		
			
				
					
									 distanceText   =   String . format ( " 实时距离:%.1f 米 " ,   distanceM ) ;  
			
		
	
		
		
			
				
					
								 }   else   {  
			
		
	
		
		
			
				
					
									 distanceText   =   String . format ( " 实时距离:%.1f 千米 " ,   distanceM   /   1000 ) ;  
			
		
	
		
		
			
				
					
								 }  
			
		
	
		
		
			
				
					
								 distanceColor   =   getColorRes ( R . color . colorEnableGreen ) ;  
			
		
	
		
		
			
				
					
							 } // 4. 刷新可见控件(仅更新屏幕上显示的控件)  
			
		
	
		
		
			
				
					
							 TextView   distanceView   =   mVisibleDistanceViews . get ( positionId ) ; 		 TextView   distanceView   =   mVisibleDistanceViews . get ( positionId ) ;  
			
		
	
		
		
			
				
					
					         if   ( distanceView   ! =   null   & &   distanceView . isShown ( ) )   {   // 仅更新“显示中”的控件 		 if   ( distanceView   ! =   null   & &   distanceView . isShown ( ) )   {  
			
				
				
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " 更新距离UI:  "   +   positionId   +   " ,文本= "   +   distanceText ) ;  
			
		
	
		
		
	
		
		
			
				
					
								 distanceView . setText ( distanceText ) ; 			 distanceView . setText ( distanceText ) ;  
			
		
	
		
		
			
				
					
								 distanceView . setTextColor ( distanceColor ) ; 			 distanceView . setTextColor ( distanceColor ) ;  
			
		
	
		
		
			
				
					
					             // 同步更新任务状态 			 LogUtils . d ( TAG ,   " 更新UI成功:  "   +   positionId   +   " ,文本= "   +   distanceText ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					// 同步刷新任务状态(原逻辑保留)  
			
		
	
		
		
			
				
					
								 refreshTaskBingoStatus ( positionId ) ; 			 refreshTaskBingoStatus ( positionId ) ;  
			
		
	
		
		
			
				
					
							 }   else   { 		 }   else   {  
			
		
	
		
		
			
				
					
					             // 控件不存在/不可见时,移除 映射+同步服务 // 控件不存在/不可见:清理 映射+同步服务  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 if   ( mVisibleDistanceViews . containsKey ( positionId ) )   { 			 if   ( mVisibleDistanceViews . containsKey ( positionId ) )   {  
			
		
	
		
		
			
				
					
									 mVisibleDistanceViews . remove ( positionId ) ; 				 mVisibleDistanceViews . remove ( positionId ) ;  
			
		
	
		
		
			
				
					
					                 LogUtils . w ( TAG ,   " 更新距离 失败:  "   +   positionId   +   "  对应的TextView不存在 /已移除 " ) ; 				 LogUtils . w ( TAG ,   " 更新UI 失败:  "   +   positionId   +   "  控件不可见 /已移除 " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
								 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 			 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
									 mDistanceService . removeVisibleDistanceView ( positionId ) ; 				 mDistanceService . removeVisibleDistanceView ( positionId ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -239,21 +271,24 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /**  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 - 保留:从上下文获取颜色资源(异常时返回默认灰色)  
			
		
	
		
		
			
				
					
						 */  
			
		
	
		
		
			
				
					
						 @Override 	 @Override  
			
		
	
		
		
			
				
					
						 public   int   getColorRes ( int   resId )   { 	 public   int   getColorRes ( int   resId )   {  
			
		
	
		
		
			
				
					
							 if   ( mContext   ! =   null )   { 		 if   ( mContext   ! =   null )   {  
			
		
	
		
		
			
				
					
								 try   { 			 try   {  
			
		
	
		
		
			
				
					
					                 // Java7:   
			
		
	
		
		
			
				
					
									 return   mContext . getResources ( ) . getColor ( resId ) ; 				 return   mContext . getResources ( ) . getColor ( resId ) ;  
			
		
	
		
		
			
				
					
								 }   catch   ( Exception   e )   { 			 }   catch   ( Exception   e )   {  
			
		
	
		
		
			
				
					
									 LogUtils . d ( TAG ,   " 获取颜色资源失败(  "   +   resId   +   " ) "   +   e . getMessage ( ) ) ; 				 LogUtils . d ( TAG ,   " 获取颜色资源失败(  "   +   resId   +   " ) "   +   e . getMessage ( ) ) ;  
			
		
	
		
		
			
				
					
					                 return   mContext . getResources ( ) . getColor ( R . color . colorGrayText ) ;   // 异常时返回默认灰色 				 return   mContext . getResources ( ) . getColor ( R . color . colorGrayText ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 return   mContext . getResources ( ) . getColor ( R . color . colorGrayText ) ; 		 return   mContext . getResources ( ) . getColor ( R . color . colorGrayText ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // ---------------------- 任务状态刷新 ---------------------- // ---------------------- 任务状态刷新(原逻辑保留)  ----------------------  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 private   void   refreshTaskBingoStatus ( String   positionId )   { 	 private   void   refreshTaskBingoStatus ( String   positionId )   {  
			
		
	
		
		
			
				
					
							 Integer   targetPosIndex   =   mPositionIdToIndexMap . get ( positionId ) ; 		 Integer   targetPosIndex   =   mPositionIdToIndexMap . get ( positionId ) ;  
			
		
	
		
		
			
				
					
							 if   ( targetPosIndex   ! =   null   & &   targetPosIndex   > =   0   & &   targetPosIndex   <   mPositionList . size ( ) )   { 		 if   ( targetPosIndex   ! =   null   & &   targetPosIndex   > =   0   & &   targetPosIndex   <   mPositionList . size ( ) )   {  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -262,13 +297,12 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // ---------------------- RecyclerView 核心方法 ---------------------- // ---------------------- RecyclerView 核心方法(原逻辑保留,适配数据来源)  ----------------------  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 @Override 	 @Override  
			
		
	
		
		
			
				
					
						 public   int   getItemViewType ( int   position )   { 	 public   int   getItemViewType ( int   position )   {  
			
		
	
		
		
			
				
					
					         // Java7:   
			
		
	
		
		
			
				
					
							 if   ( position   <   0   | |   position   > =   mPositionList . size ( ) )   { 		 if   ( position   <   0   | |   position   > =   mPositionList . size ( ) )   {  
			
		
	
		
		
			
				
					
								 LogUtils . w ( TAG ,   " getItemViewType: (  "   +   position   +   " ) " ) ; 			 LogUtils . w ( TAG ,   " getItemViewType: (  "   +   position   +   " ) " ) ;  
			
		
	
		
		
			
				
					
					             return   VIEW_TYPE_SIMPLE ;   // 异常时返回默认类型 			 return   VIEW_TYPE_SIMPLE ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 PositionModel   model   =   mPositionList . get ( position ) ; 		 PositionModel   model   =   mPositionList . get ( position ) ;  
			
		
	
		
		
			
				
					
							 return   model . isSimpleView ( )   ?   VIEW_TYPE_SIMPLE   :   VIEW_TYPE_EDIT ; 		 return   model . isSimpleView ( )   ?   VIEW_TYPE_SIMPLE   :   VIEW_TYPE_EDIT ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -289,7 +323,6 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 @Override 	 @Override  
			
		
	
		
		
			
				
					
						 public   void   onBindViewHolder ( @NonNull   RecyclerView . ViewHolder   holder ,   int   position )   { 	 public   void   onBindViewHolder ( @NonNull   RecyclerView . ViewHolder   holder ,   int   position )   {  
			
		
	
		
		
			
				
					
					         // Java7: ( )   
			
		
	
		
		
			
				
					
							 if   ( position   <   0   | |   position   > =   mPositionList . size ( ) )   { 		 if   ( position   <   0   | |   position   > =   mPositionList . size ( ) )   {  
			
		
	
		
		
			
				
					
								 LogUtils . w ( TAG ,   " onBindViewHolder: (  "   +   position   +   " ) " ) ; 			 LogUtils . w ( TAG ,   " onBindViewHolder: (  "   +   position   +   " ) " ) ;  
			
		
	
		
		
			
				
					
								 return ; 			 return ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -297,7 +330,6 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 PositionModel   model   =   mPositionList . get ( position ) ; 		 PositionModel   model   =   mPositionList . get ( position ) ;  
			
		
	
		
		
			
				
					
							 mPositionIdToIndexMap . put ( model . getPositionId ( ) ,   position ) ; 		 mPositionIdToIndexMap . put ( model . getPositionId ( ) ,   position ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 绑定对应视图  
			
		
	
		
		
			
				
					
							 if   ( holder   instanceof   SimpleViewHolder )   { 		 if   ( holder   instanceof   SimpleViewHolder )   {  
			
		
	
		
		
			
				
					
								 bindSimpleView ( ( SimpleViewHolder )   holder ,   model ,   position ) ; 			 bindSimpleView ( ( SimpleViewHolder )   holder ,   model ,   position ) ;  
			
		
	
		
		
			
				
					
							 }   else   if   ( holder   instanceof   EditViewHolder )   { 		 }   else   if   ( holder   instanceof   EditViewHolder )   {  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -310,7 +342,7 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 return   mPositionList . size ( ) ; 		 return   mPositionList . size ( ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // ---------------------- 视图附加/分离/回收(控件管理 )  // ---------------------- 视图附加/分离/回收(原逻辑保留,优化性能 )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 @Override 	 @Override  
			
		
	
		
		
			
				
					
						 public   void   onViewAttachedToWindow ( @NonNull   RecyclerView . ViewHolder   holder )   { 	 public   void   onViewAttachedToWindow ( @NonNull   RecyclerView . ViewHolder   holder )   {  
			
		
	
		
		
			
				
					
							 super . onViewAttachedToWindow ( holder ) ; 		 super . onViewAttachedToWindow ( holder ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -322,9 +354,9 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
							 PositionModel   model   =   mPositionList . get ( position ) ; 		 PositionModel   model   =   mPositionList . get ( position ) ;  
			
		
	
		
		
			
				
					
							 String   positionId   =   model . getPositionId ( ) ; 		 String   positionId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
					         mPositionIdToIndexMap . put ( positionId ,   position ) ;   // 同步索引 		 mPositionIdToIndexMap . put ( positionId ,   position ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 找到距离TextView( : +非空判断 )  // 找到距离TextView( : )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 TextView   distanceView   =   null ; 		 TextView   distanceView   =   null ;  
			
		
	
		
		
			
				
					
							 if   ( holder   instanceof   SimpleViewHolder )   { 		 if   ( holder   instanceof   SimpleViewHolder )   {  
			
		
	
		
		
			
				
					
								 distanceView   =   ( ( SimpleViewHolder )   holder ) . tvSimpleRealDistance ; 			 distanceView   =   ( ( SimpleViewHolder )   holder ) . tvSimpleRealDistance ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -332,15 +364,12 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
								 distanceView   =   ( ( EditViewHolder )   holder ) . tvEditRealDistance ; 			 distanceView   =   ( ( EditViewHolder )   holder ) . tvEditRealDistance ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 仅 添加有效控件, 避免重复映射  // 添加可见控件映射( 避免重复)   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( distanceView   ! =   null   & &   ! mVisibleDistanceViews . containsKey ( positionId ) )   { 		 if   ( distanceView   ! =   null   & &   ! mVisibleDistanceViews . containsKey ( positionId ) )   {  
			
		
	
		
		
			
				
					
								 mVisibleDistanceViews . put ( positionId ,   distanceView ) ; 			 mVisibleDistanceViews . put ( positionId ,   distanceView ) ;  
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " 视图附加: (  "   +   positionId   +   " ) , 当前可见 数量="   +   mVisibleDistanceViews . size ( ) ) ; 			 LogUtils . d ( TAG ,   " 视图附加: (  "   +   positionId   +   " ),数量= "   +   mVisibleDistanceViews . size ( ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					             // 同步到服务  
			
		
	
		
		
	
		
		
			
				
					
								 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 			 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
									 mDistanceService . addVisibleDistanceView ( positionId ) ; 				 mDistanceService . addVisibleDistanceView ( positionId ) ;  
			
		
	
		
		
			
				
					
					             }   else   {  
			
		
	
		
		
			
				
					
					                 LogUtils . w ( TAG ,   " 视图附加: , (  "   +   positionId   +   " ) " ) ;  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -356,10 +385,10 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
							 PositionModel   model   =   mPositionList . get ( position ) ; 		 PositionModel   model   =   mPositionList . get ( position ) ;  
			
		
	
		
		
			
				
					
							 String   positionId   =   model . getPositionId ( ) ; 		 String   positionId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
					         // 移除本地映射+同步服务 // 移除可见控件映射  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( mVisibleDistanceViews . containsKey ( positionId ) )   { 		 if   ( mVisibleDistanceViews . containsKey ( positionId ) )   {  
			
		
	
		
		
			
				
					
								 mVisibleDistanceViews . remove ( positionId ) ; 			 mVisibleDistanceViews . remove ( positionId ) ;  
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " 视图分离: (  "   +   positionId   +   " ) , 当前可见 数量="   +   mVisibleDistanceViews . size ( ) ) ; 			 LogUtils . d ( TAG ,   " 视图分离: (  "   +   positionId   +   " ),数量= "   +   mVisibleDistanceViews . size ( ) ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 			 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
									 mDistanceService . removeVisibleDistanceView ( positionId ) ; 				 mDistanceService . removeVisibleDistanceView ( positionId ) ;  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -372,17 +401,16 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 int   position   =   holder . getAdapterPosition ( ) ; 		 int   position   =   holder . getAdapterPosition ( ) ;  
			
		
	
		
		
			
				
					
							 if   ( position   > =   0   & &   position   <   mPositionList . size ( ) )   { 		 if   ( position   > =   0   & &   position   <   mPositionList . size ( ) )   {  
			
		
	
		
		
			
				
					
								 String   positionId   =   mPositionList . get ( position ) . getPositionId ( ) ; 			 String   positionId   =   mPositionList . get ( position ) . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
					             // 清理本地 映射 // 清理映射  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 mVisibleDistanceViews . remove ( positionId ) ; 			 mVisibleDistanceViews . remove ( positionId ) ;  
			
		
	
		
		
			
				
					
								 mPositionIdToIndexMap . remove ( positionId ) ; 			 mPositionIdToIndexMap . remove ( positionId ) ;  
			
		
	
		
		
			
				
					
								 LogUtils . d ( TAG ,   " 视图回收: (  "   +   positionId   +   " ) " ) ; 			 LogUtils . d ( TAG ,   " 视图回收: (  "   +   positionId   +   " ) " ) ;  
			
		
	
		
		
			
				
					
					             // 同步服务  
			
		
	
		
		
			
				
					
								 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 			 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
									 mDistanceService . removeVisibleDistanceView ( positionId ) ; 				 mDistanceService . removeVisibleDistanceView ( positionId ) ;  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 清理任务列表资源( : )  // 清理任务列表资源  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( holder   instanceof   SimpleViewHolder )   { 		 if   ( holder   instanceof   SimpleViewHolder )   {  
			
		
	
		
		
			
				
					
								 SimpleViewHolder   simpleHolder   =   ( SimpleViewHolder )   holder ; 			 SimpleViewHolder   simpleHolder   =   ( SimpleViewHolder )   holder ;  
			
		
	
		
		
			
				
					
								 if   ( simpleHolder . ptlvSimpleTasks   ! =   null )   { 			 if   ( simpleHolder . ptlvSimpleTasks   ! =   null )   {  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -398,30 +426,34 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // ---------------------- 视图绑定(简单视图/编辑视图) ---------------------- // ---------------------- 视图绑定(简单视图/编辑视图,原逻辑保留 )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 绑定简单视图(仅展示,无编辑功能)  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 绑定简单视图(仅展示)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
						 private   void   bindSimpleView ( final   SimpleViewHolder   holder ,   final   PositionModel   model ,   final   int   position )   { 	 private   void   bindSimpleView ( final   SimpleViewHolder   holder ,   final   PositionModel   model ,   final   int   position )   {  
			
		
	
		
		
			
				
					
					         // 绑定基础数据(Java7: ,  )  // 绑定基础数据(保留6位小数 )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 holder . tvSimpleLongitude . setText ( String . format ( " 经度:%.6f " ,   model . getLongitude ( ) ) ) ; 		 holder . tvSimpleLongitude . setText ( String . format ( " 经度:%.6f " ,   model . getLongitude ( ) ) ) ;  
			
		
	
		
		
			
				
					
							 holder . tvSimpleLatitude . setText ( String . format ( " 纬度:%.6f " ,   model . getLatitude ( ) ) ) ; 		 holder . tvSimpleLatitude . setText ( String . format ( " 纬度:%.6f " ,   model . getLatitude ( ) ) ) ;  
			
		
	
		
		
			
				
					
					         holder . tvSimpleMemo . setText ( String . format ( " 备注:%s " ,   model . getMemo ( ) ) ) ; 		 holder . tvSimpleMemo . setText ( String . format ( " 备注:%s " ,   model . getMemo ( ) ) ) ; // 初始化距离文本( )   
			
				
				
			
		
	
		
		
			
				
					
					         // 初始默认文本(记录日志,便于排查未覆盖问题) 		 double   initDistance   =   model . getRealPositionDistance ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         holder . tvSimpleRealDistance . setText ( " 实时距离:加载中... " ) ; 		 if   ( initDistance   = =   - 1 )   {  
			
				
				
			
		
	
		
		
			
				
					
					         holder . tvSimpleRealDistance . setTextColor  ( mContext . getResour ces  ( ) . getColor ( R . color . colorGrayText ) ) ; 			 holder . tvSimpleRealDistance . setText ( model . isEnableRealPositionDistan ce ( )   ?   " 实时距离:计算异常 "   :   " 实时距离:未启用 " ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         LogUtils . d ( TAG ,   " 绑定简单视图: (  "   +   model . getPositionId ( )   +   " ) " ) ; 			 holder . tvSimpleRealDistance . setTextColor ( getColorRes ( model . isEnableRealPositionDistance ( )   ?   R . color . colorRed   :   R . color . colorGrayText ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
							 }   else   {  
			
				
				
			
		
	
		
		
			
				
					
					         // 长按编辑逻辑( : )  			 String   initText   =   initDistance   <   1000   ?  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
									 String . format ( " 实时距离:%.1f 米 " ,   initDistance )   :  
			
		
	
		
		
			
				
					
									 String . format ( " 实时距离:%.1f 千米 " ,   initDistance   /   1000 ) ;  
			
		
	
		
		
			
				
					
								 holder . tvSimpleRealDistance . setText ( initText ) ;  
			
		
	
		
		
			
				
					
								 holder . tvSimpleRealDistance . setTextColor ( getColorRes ( R . color . colorEnableGreen ) ) ;  
			
		
	
		
		
			
				
					
							 }  
			
		
	
		
		
			
				
					
							 LogUtils . d ( TAG ,   " 绑定简单视图: (  "   +   model . getPositionId ( )   +   " ) " ) ; // 长按编辑逻辑(匿名内部类)  
			
		
	
		
		
			
				
					
							 holder . itemView . setOnLongClickListener ( new   View . OnLongClickListener ( )   { 		 holder . itemView . setOnLongClickListener ( new   View . OnLongClickListener ( )   {  
			
		
	
		
		
			
				
					
									 @Override 				 @Override  
			
		
	
		
		
			
				
					
									 public   boolean   onLongClick ( View   v )   { 				 public   boolean   onLongClick ( View   v )   {  
			
		
	
		
		
			
				
					
										 PopupMenu   popupMenu   =   new   PopupMenu ( mContext ,   v ) ; 					 PopupMenu   popupMenu   =   new   PopupMenu ( mContext ,   v ) ;  
			
		
	
		
		
			
				
					
										 MenuInflater   menuInflater   =   popupMenu . getMenuInflater ( ) ; 					 MenuInflater   menuInflater   =   popupMenu . getMenuInflater ( ) ;  
			
		
	
		
		
			
				
					
										 menuInflater . inflate ( R . menu . menu_item_edit ,   popupMenu . getMenu ( ) ) ; 					 menuInflater . inflate ( R . menu . menu_item_edit ,   popupMenu . getMenu ( ) ) ; popupMenu . setOnMenuItemClickListener ( new   PopupMenu . OnMenuItemClickListener ( )   {  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
										 // Java7:   
			
		
	
		
		
			
				
					
										 popupMenu . setOnMenuItemClickListener ( new   PopupMenu . OnMenuItemClickListener ( )   {  
			
		
	
		
		
	
		
		
			
				
					
												 @Override 							 @Override  
			
		
	
		
		
			
				
					
												 public   boolean   onMenuItemClick ( MenuItem   item )   { 							 public   boolean   onMenuItemClick ( MenuItem   item )   {  
			
		
	
		
		
			
				
					
													 if   ( item . getItemId ( )   = =   R . id . menu_edit )   { 								 if   ( item . getItemId ( )   = =   R . id . menu_edit )   {  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -435,11 +467,9 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
										 popupMenu . show ( ) ; 					 popupMenu . show ( ) ;  
			
		
	
		
		
			
				
					
										 return   true ; 					 return   true ;  
			
		
	
		
		
			
				
					
									 } 				 }  
			
		
	
		
		
			
				
					
								 } ) ; 			 } ) ; // 绑定任务列表  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 绑定任务列表( : )   
			
		
	
		
		
	
		
		
			
				
					
							 String   currentPosId   =   model . getPositionId ( ) ; 		 String   currentPosId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
					         ArrayList < PositionTaskModel >   matchedTasks   =   getSafeTasks ( currentPosId ) ; 		 ArrayList   matchedTasks   =   getSafeTasks ( currentPosId ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( holder . ptlvSimpleTasks   ! =   null )   { 		 if   ( holder . ptlvSimpleTasks   ! =   null )   {  
			
		
	
		
		
			
				
					
								 holder . ptlvSimpleTasks . clearData ( ) ; 			 holder . ptlvSimpleTasks . clearData ( ) ;  
			
		
	
		
		
			
				
					
								 holder . ptlvSimpleTasks . setViewStatus ( PositionTaskListView . VIEW_MODE_SIMPLE ) ; 			 holder . ptlvSimpleTasks . setViewStatus ( PositionTaskListView . VIEW_MODE_SIMPLE ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -450,27 +480,36 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 绑定编辑视图(支持修改备注、开关距离、增删任务)  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 绑定编辑视图(支持修改)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
						 private   void   bindEditView ( final   EditViewHolder   holder ,   final   PositionModel   model ,   final   int   position )   { 	 private   void   bindEditView ( final   EditViewHolder   holder ,   final   PositionModel   model ,   final   int   position )   {  
			
		
	
		
		
			
				
					
					// 绑定基础数据 // 绑定基础数据  
			
		
	
		
		
			
				
					
							 holder . tvEditLongitude . setText ( String . format ( " 经度:%.6f " ,   model . getLongitude ( ) ) ) ; 		 holder . tvEditLongitude . setText ( String . format ( " 经度:%.6f " ,   model . getLongitude ( ) ) ) ;  
			
		
	
		
		
			
				
					
							 holder . tvEditLatitude . setText ( String . format ( " 纬度:%.6f " ,   model . getLatitude ( ) ) ) ; 		 holder . tvEditLatitude . setText ( String . format ( " 纬度:%.6f " ,   model . getLatitude ( ) ) ) ;  
			
		
	
		
		
			
				
					
							 holder . etEditMemo . setText ( model . getMemo ( ) ) ; 		 holder . etEditMemo . setText ( model . getMemo ( ) ) ;  
			
		
	
		
		
			
				
					
					         holder . etEditMemo . setSelection ( holder . etEditMemo . getText ( ) . length ( ) ) ; 		 holder . etEditMemo . setSelection ( holder . etEditMemo . getText ( ) . length ( ) ) ; // 初始化距离文本( )   
			
				
				
			
		
	
		
		
			
				
					
					         // 初始默认文本 		 double   initDistance   =   model . getRealPositionDistance ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         holder . tvEditRealDistance . setText ( " 实时距离:加载中... " ) ; 		 if   ( initDistance   = =   - 1 )   {  
			
				
				
			
		
	
		
		
			
				
					
					         holder . tvEditRealDistance . setTextColor  ( mContext . getResour ces  ( ) . getColor ( R . color . colorGrayText ) ) ; 			 holder . tvEditRealDistance . setText ( model . isEnableRealPositionDistan ce ( )   ?   " 实时距离:计算异常 "   :   " 实时距离:未启用 " ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         LogUtils . d ( TAG ,   " 绑定编辑视图: (  "   +   model . getPositionId ( )   +   " ) " ) ; 			 holder . tvEditRealDistance . setTextColor ( getColorRes ( model . isEnableRealPositionDistance ( )   ?   R . color . colorRed   :   R . color . colorGrayText ) ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
							 }   else   {  
			
		
	
		
		
			
				
					
								 String   initText   =   initDistance   <   1000   ?  
			
		
	
		
		
			
				
					
									 String . format ( " 实时距离:%.1f 米 " ,   initDistance )   :  
			
		
	
		
		
			
				
					
									 String . format ( " 实时距离:%.1f 千米 " ,   initDistance   /   1000 ) ;  
			
		
	
		
		
			
				
					
								 holder . tvEditRealDistance . setText ( initText ) ;  
			
		
	
		
		
			
				
					
								 holder . tvEditRealDistance . setTextColor ( getColorRes ( R . color . colorEnableGreen ) ) ;  
			
		
	
		
		
			
				
					
							 }  
			
		
	
		
		
			
				
					
							 LogUtils . d ( TAG ,   " 绑定编辑视图: (  "   +   model . getPositionId ( )   +   " ) " ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 实时距离开关状态(Java7:  显式判断设置选中) // 实时距离开关状态(显式判断设置选中)  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( model . isEnableRealPositionDistance ( ) )   { 		 if   ( model . isEnableRealPositionDistance ( ) )   {  
			
		
	
		
		
			
				
					
								 holder . rgRealDistanceSwitch . check ( R . id . rb_enable ) ; 			 holder . rgRealDistanceSwitch . check ( R . id . rb_enable ) ;  
			
		
	
		
		
			
				
					
							 }   else   { 		 }   else   {  
			
		
	
		
		
			
				
					
								 holder . rgRealDistanceSwitch . check ( R . id . rb_disable ) ; 			 holder . rgRealDistanceSwitch . check ( R . id . rb_disable ) ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 删除按钮逻辑(Java7:  )  // 删除按钮逻辑(匿名内部类 )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 holder . btnEditDelete . setOnClickListener ( new   View . OnClickListener ( )   { 		 holder . btnEditDelete . setOnClickListener ( new   View . OnClickListener ( )   {  
			
		
	
		
		
			
				
					
									 @Override 				 @Override  
			
		
	
		
		
			
				
					
									 public   void   onClick ( View   v )   { 				 public   void   onClick ( View   v )   {  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -479,9 +518,10 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					// 清理本地映射 // 清理本地映射  
			
		
	
		
		
			
				
					
											 mPositionTaskMap . remove ( model . getPositionId ( ) ) ; 						 mPositionTaskMap . remove ( model . getPositionId ( ) ) ;  
			
		
	
		
		
			
				
					
											 mPositionIdToIndexMap . remove ( model . getPositionId ( ) ) ; 						 mPositionIdToIndexMap . remove ( model . getPositionId ( ) ) ;  
			
		
	
		
		
			
				
					
											 // 同步服务 // 同步服务(移除无效位置)   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
											 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 						 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
												 mDistanceService . removeVisibleDistanceView ( model . getPositionId ( ) ) ; 							 mDistanceService . removeVisibleDistanceView ( model . getPositionId ( ) ) ;  
			
		
	
		
		
			
				
					
												 mDistanceService . syncPositionList ( mPositionList ) ;   // 同步更新后的列表  
			
		
	
		
		
			
				
					
											 } 						 }  
			
		
	
		
		
			
				
					
										 } 					 }  
			
		
	
		
		
			
				
					
									 } 				 }  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -501,7 +541,7 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 holder . btnEditConfirm . setOnClickListener ( new   View . OnClickListener ( )   { 		 holder . btnEditConfirm . setOnClickListener ( new   View . OnClickListener ( )   {  
			
		
	
		
		
			
				
					
									 @Override 				 @Override  
			
		
	
		
		
			
				
					
									 public   void   onClick ( View   v )   { 				 public   void   onClick ( View   v )   {  
			
		
	
		
		
			
				
					
										 // 获取输入数据(Java7:  显式trim,  // 获取输入数据( )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 String   newMemo   =   holder . etEditMemo . getText ( ) . toString ( ) . trim ( ) ; 					 String   newMemo   =   holder . etEditMemo . getText ( ) . toString ( ) . trim ( ) ;  
			
		
	
		
		
			
				
					
										 model . setMemo ( newMemo ) ; 					 model . setMemo ( newMemo ) ;  
			
		
	
		
		
			
				
					
										 boolean   isEnableDistance   =   holder . rgRealDistanceSwitch . getCheckedRadioButtonId ( )   = =   R . id . rb_enable ; 					 boolean   isEnableDistance   =   holder . rgRealDistanceSwitch . getCheckedRadioButtonId ( )   = =   R . id . rb_enable ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -509,13 +549,13 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 绑定任务到当前位置 // 绑定任务到当前位置  
			
		
	
		
		
			
				
					
										 String   currentPosId   =   model . getPositionId ( ) ; 					 String   currentPosId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
										 ArrayList < PositionTaskModel >   allTasks   =   ( holder . ptlvEditTasks   ! =   null )   ?   holder . ptlvEditTasks . getAllTasks ( )   :   new   ArrayList < PositionTaskModel > ( ) ; 					 ArrayList   allTasks   =   ( holder . ptlvEditTasks   ! =   null )   ?   holder . ptlvEditTasks . getAllTasks ( )   :   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
										 ArrayList < PositionTaskModel >   boundTasks   =   new   ArrayList < PositionTaskModel > ( ) ; 					 ArrayList   boundTasks   =   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
										 // Java7: ,  绑定位置ID// 迭代器遍历: 绑定位置ID到任务  
			
				
				
			
		
	
		
		
			
				
					
										 Iterator < PositionTaskModel >   taskIterator   =   allTasks . iterator ( ) ; 					 Iterator   taskIterator   =   allTasks . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
										 while   ( taskIterator . hasNext ( ) )   { 					 while   ( taskIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
											 PositionTaskModel   task   =   taskIterator . next ( ) ; 						 PositionTaskModel   task   =   ( PositionTaskModel ) taskIterator . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
											 if   ( task   ! =   null )   { 						 if   ( task   ! =   null )   {  
			
		
	
		
		
			
				
					
												 task . setPositionId ( currentPosId ) ; 							 task . setPositionId ( currentPosId ) ;  
			
		
	
		
		
			
				
					
												 boundTasks . add ( task ) ; 							 boundTasks . add ( task ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -524,21 +564,21 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 更新本地任务映射 // 更新本地任务映射  
			
		
	
		
		
			
				
					
										 mPositionTaskMap . put ( currentPosId ,   boundTasks ) ; 					 mPositionTaskMap . put ( currentPosId ,   boundTasks ) ;  
			
		
	
		
		
			
				
					
										 // 清理旧任务+添加新任务( :  迭代器删除,避免ConcurrentModificationException )  // 清理旧任务( 安全 删除,避免并发异常 )   
			
				
				
			
		
	
		
		
			
				
					
										 Iterator < PositionTaskModel >   globalTaskIter   =   mAllPositionTasks . iterator ( ) ; 					 Iterator   globalTaskIter   =   mAllPositionTasks . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
										 while   ( globalTaskIter . hasNext ( ) )   { 					 while   ( globalTaskIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
											 PositionTaskModel   task   =   globalTaskIter . next ( ) ; 						 PositionTaskModel   task   =   ( PositionTaskModel ) globalTaskIter . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
											 if   ( task   ! =   null   & &   currentPosId . equals ( task . getPositionId ( ) ) )   { 						 if   ( task   ! =   null   & &   currentPosId . equals ( task . getPositionId ( ) ) )   {  
			
		
	
		
		
			
				
					
												 globalTaskIter . remove ( ) ;   // Java7:  							 globalTaskIter . remove ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
											 } 						 }  
			
		
	
		
		
			
				
					
										 } 					 }  
			
		
	
		
		
			
				
					
										 mAllPositionTasks . addAll ( boundTasks ) ; 					 mAllPositionTasks . addAll ( boundTasks ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
										 // 同步服务数据 // 同步服务数据(传递原列表引用)   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 					 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
											 mDistanceService . syncPositionList ( mPositionList ) ; 						 mDistanceService . syncPositionList ( mPositionList ) ;   // 同步更新后的位置列表  
			
				
				
			
		
	
		
		
			
				
					
											 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ; 						 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;   // 同步更新后的任务列表  
			
				
				
			
		
	
		
		
			
				
					
											 LogUtils . d ( TAG ,   " 编辑视图 保存:同步位置+任务数据 到服务(  "   +   currentPosId   +   " ) " ) ; 						 LogUtils . d ( TAG ,   " 编辑保存:同步位置+任务到服务(  "   +   currentPosId   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
										 } 					 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 切换视图+回调通知 // 切换视图+回调通知  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -551,21 +591,21 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
									 } 				 }  
			
		
	
		
		
			
				
					
								 } ) ; 			 } ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 任务列表绑定与更新逻辑(Java7:  匿名内部类实现任务更新 监听) // 任务列表绑定与更新逻辑(匿名内部类实现监听)  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 final   String   currentPosId   =   model . getPositionId ( ) ; 		 final   String   currentPosId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
					         ArrayList < PositionTaskModel >   matchedTasks   =   getSafeTasks ( currentPosId ) ; 		 ArrayList   matchedTasks   =   getSafeTasks ( currentPosId ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( holder . ptlvEditTasks   ! =   null )   { 		 if   ( holder . ptlvEditTasks   ! =   null )   {  
			
		
	
		
		
			
				
					
								 holder . ptlvEditTasks . clearData ( ) ; 			 holder . ptlvEditTasks . clearData ( ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					             // 任务更新监听( : )  // 任务更新监听  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 holder . ptlvEditTasks . setOnTaskUpdatedListener ( new   PositionTaskListView . OnTaskUpdatedListener ( )   { 			 holder . ptlvEditTasks . setOnTaskUpdatedListener ( new   PositionTaskListView . OnTaskUpdatedListener ( )   {  
			
		
	
		
		
			
				
					
										 @Override 					 @Override  
			
		
	
		
		
			
				
					
										 public   void   onTaskUpdated ( String   posId ,   ArrayList < PositionTaskModel >   updatedTasks )   { 					 public   void   onTaskUpdated ( String   posId ,   ArrayList   updatedTasks )   {  
			
				
				
			
		
	
		
		
			
				
					
											 ArrayList < PositionTaskModel >   boundTasks   =   new   ArrayList < PositionTaskModel > ( ) ; 						 ArrayList   boundTasks   =   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
											 // 绑定任务到当前位置 // 绑定位置ID到任务  
			
				
				
			
		
	
		
		
			
				
					
											 Iterator < PositionTaskModel >   taskIterator   =   updatedTasks . iterator ( ) ; 						 Iterator   taskIterator   =   updatedTasks . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
											 while   ( taskIterator . hasNext ( ) )   { 						 while   ( taskIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
												 PositionTaskModel   task   =   taskIterator . next ( ) ; 							 PositionTaskModel   task   =   ( PositionTaskModel ) taskIterator . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
												 if   ( task   ! =   null )   { 							 if   ( task   ! =   null )   {  
			
		
	
		
		
			
				
					
													 task . setPositionId ( currentPosId ) ; 								 task . setPositionId ( currentPosId ) ;  
			
		
	
		
		
			
				
					
													 boundTasks . add ( task ) ; 								 boundTasks . add ( task ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -575,9 +615,9 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					// 更新本地映射 // 更新本地映射  
			
		
	
		
		
			
				
					
											 mPositionTaskMap . put ( currentPosId ,   boundTasks ) ; 						 mPositionTaskMap . put ( currentPosId ,   boundTasks ) ;  
			
		
	
		
		
			
				
					
					// 清理旧任务+添加新任务 // 清理旧任务+添加新任务  
			
		
	
		
		
			
				
					
											 Iterator < PositionTaskModel >   globalTaskIter   =   mAllPositionTasks . iterator ( ) ; 						 Iterator   globalTaskIter   =   mAllPositionTasks . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
											 while   ( globalTaskIter . hasNext ( ) )   { 						 while   ( globalTaskIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
												 PositionTaskModel   task   =   globalTaskIter . next ( ) ; 							 PositionTaskModel   task   =   ( PositionTaskModel ) globalTaskIter . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
												 if   ( task   ! =   null   & &   currentPosId . equals ( task . getPositionId ( ) ) )   { 							 if   ( task   ! =   null   & &   currentPosId . equals ( task . getPositionId ( ) ) )   {  
			
		
	
		
		
			
				
					
													 globalTaskIter . remove ( ) ; 								 globalTaskIter . remove ( ) ;  
			
		
	
		
		
			
				
					
												 } 							 }  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -587,7 +627,7 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					// 同步服务 // 同步服务  
			
		
	
		
		
			
				
					
											 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 						 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
												 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ; 							 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;  
			
		
	
		
		
			
				
					
												 LogUtils . d ( TAG ,   " 任务更新:同步任务数据 到服务(  "   +   currentPosId   +   " ,任务数量 = "   +   boundTasks . size ( )   +   " ) " ) ; 							 LogUtils . d ( TAG ,   " 任务更新: (  "   +   currentPosId   +   " ,任务数= "   +   boundTasks . size ( )   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
											 } 						 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 回调通知 // 回调通知  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -605,7 +645,7 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
								 holder . ptlvEditTasks . setViewStatus ( PositionTaskListView . VIEW_MODE_EDIT ) ; 			 holder . ptlvEditTasks . setViewStatus ( PositionTaskListView . VIEW_MODE_EDIT ) ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 添加任务逻辑(Java7:  )  // 添加任务逻辑(匿名内部类 )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 holder . btnAddTask . setOnClickListener ( new   View . OnClickListener ( )   { 		 holder . btnAddTask . setOnClickListener ( new   View . OnClickListener ( )   {  
			
		
	
		
		
			
				
					
									 @Override 				 @Override  
			
		
	
		
		
			
				
					
									 public   void   onClick ( View   v )   { 				 public   void   onClick ( View   v )   {  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -615,7 +655,7 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
											 return ; 						 return ;  
			
		
	
		
		
			
				
					
										 } 					 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
										 // 创建新任务(Java7:  显式调用构造函数, )  // 创建新任务(显式调用构造函数)  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 PositionTaskModel   newTask   =   new   PositionTaskModel ( 					 PositionTaskModel   newTask   =   new   PositionTaskModel (  
			
		
	
		
		
			
				
					
											 PositionTaskModel . genTaskId ( ) , 						 PositionTaskModel . genTaskId ( ) ,  
			
		
	
		
		
			
				
					
											 currentPosId , 						 currentPosId ,  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -626,15 +666,15 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
										 ) ; 					 ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 更新本地任务列表 // 更新本地任务列表  
			
		
	
		
		
			
				
					
										 ArrayList < PositionTaskModel >   currentTasks   =   getSafeTasks ( currentPosId ) ; 					 ArrayList   currentTasks   =   getSafeTasks ( currentPosId ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 currentTasks . add ( newTask ) ; 					 currentTasks . add ( newTask ) ;  
			
		
	
		
		
			
				
					
										 mPositionTaskMap . put ( currentPosId ,   new   ArrayList < PositionTaskModel > ( currentTasks ) ) ; 					 mPositionTaskMap . put ( currentPosId ,   new   ArrayList ( currentTasks ) ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 mAllPositionTasks . add ( newTask ) ; 					 mAllPositionTasks . add ( newTask ) ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 同步服务 // 同步服务  
			
		
	
		
		
			
				
					
										 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 					 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
											 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ; 						 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;  
			
		
	
		
		
			
				
					
											 LogUtils . d ( TAG ,   " 新增任务:同步任务数据 到服务(  "   +   currentPosId   +   " , 新 任务ID="   +   newTask . getTaskId ( )   +   " ) " ) ; 						 LogUtils . d ( TAG ,   " 新增任务: (  "   +   currentPosId   +   " , "   +   newTask . getTaskId ( )   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
										 } 					 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// 刷新任务列表视图 // 刷新任务列表视图  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -646,208 +686,177 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
								 } ) ; 			 } ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					     // ---------------------- 工具方法 ---------------------- // ---------------------- 工具方法(原逻辑保留,适配数据来源)  ----------------------  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 安全获取任务列表( , : )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 安全获取任务列表(避免空指针)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
					     private   ArrayList < PositionTaskModel >   getSafeTasks ( String   positionId )   { 	 private   ArrayList   getSafeTasks ( String   positionId )   {  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( positionId   = =   null )   { 		 if   ( positionId   = =   null )   {  
			
		
	
		
		
			
				
					
					             LogUtils . w ( TAG ,   " getSafeTasks: , 任务 列表 " ) ; 			 LogUtils . w ( TAG ,   " getSafeTasks: ,  " ) ;  
			
				
				
			
		
	
		
		
			
				
					
					             return   new   ArrayList < PositionTaskModel > ( ) ; 			 return   new   ArrayList ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 if   ( ! mPositionTaskMap . containsKey ( positionId ) )   { 		 if   ( ! mPositionTaskMap . containsKey ( positionId ) )   {  
			
		
	
		
		
			
				
					
					             mPositionTaskMap . put ( positionId ,   new   ArrayList < PositionTaskModel > ( ) ) ; 			 mPositionTaskMap . put ( positionId ,   new   ArrayList ( ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " getSafeTasks:  "   +   positionId   +   "  无任务列表,初始化空列表 " ) ; 			 LogUtils . d ( TAG ,   " getSafeTasks: 初始化空任务列表( 位置ID= "   +   positionId   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 return   mPositionTaskMap . get ( positionId ) ; 		 return   mPositionTaskMap . get ( positionId ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 新增位置( : , )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 新增位置(同步服务时传递原列表引用)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
						 public   void   addPosition ( PositionModel   model )   { 	 public   void   addPosition ( PositionModel   model )   {  
			
		
	
		
		
			
				
					
							 if   ( model   = =   null   | |   model . getPositionId ( )   = =   null )   { 		 if   ( model   = =   null   | |   model . getPositionId ( )   = =   null )   {  
			
		
	
		
		
			
				
					
					             LogUtils . e ( TAG ,   " 新增位置失败:位置 模型/位置ID为空 " ) ; 			 LogUtils . e ( TAG ,   " 新增位置失败:模型/位置ID为空 " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 return ; 			 return ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 String   validPosId   =   model . getPositionId ( ) ; 		 String   validPosId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
							 mPositionList . add ( model ) ; 		 mPositionList . add ( model ) ;  
			
		
	
		
		
			
				
					
					         mPositionIdToIndexMap . put ( validPosId ,   mPositionList . size ( )   -   1 ) ; 		 mPositionIdToIndexMap . put ( validPosId ,   mPositionList . size ( )   -   1 ) ; // 初始化任务列表(若不存在)  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 初始化任务列表(若不存在)  
			
		
	
		
		
	
		
		
			
				
					
							 if   ( ! mPositionTaskMap . containsKey ( validPosId ) )   { 		 if   ( ! mPositionTaskMap . containsKey ( validPosId ) )   {  
			
		
	
		
		
			
				
					
					             mPositionTaskMap . put ( validPosId ,   new   ArrayList < PositionTaskModel > ( ) ) ; 			 mPositionTaskMap . put ( validPosId ,   new   ArrayList ( ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         } 		 } // 同步服务(传递原列表引用)  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 同步服务+刷新视图  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 		 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
					             mDistanceService . syncPositionList ( mPositionList ) ; 			 mDistanceService . syncPositionList ( mPositionList ) ;   // 同步更新后的列表  
			
				
				
			
		
	
		
		
			
				
					
					             // 若控件已添加,立即同步服务  
			
		
	
		
		
	
		
		
			
				
					
								 if   ( mVisibleDistanceViews . containsKey ( validPosId ) )   { 			 if   ( mVisibleDistanceViews . containsKey ( validPosId ) )   {  
			
		
	
		
		
			
				
					
									 mDistanceService . addVisibleDistanceView ( validPosId ) ; 				 mDistanceService . addVisibleDistanceView ( validPosId ) ;  
			
		
	
		
		
			
				
					
					                 LogUtils . d ( TAG ,   " 新增位置: (  "   +   validPosId   +   " ) " ) ;  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
					         } 			 LogUtils . d ( TAG ,   " 新增位置: (  "   +   validPosId   +   " ,列表总数= "   +   mPositionList . size ( )   +   " ) " ) ;  
			
				
				
			
		
	
		
		
			
				
					
							 } notifyItemInserted ( mPositionList . size ( )   -   1 ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         notifyItemInserted ( mPositionList . size ( )   -   1 ) ;  
			
		
	
		
		
			
				
					
					         LogUtils . d ( TAG ,   " 新增位置成功:  "   +   validPosId   +   " ,当前列表总数= "   +   mPositionList . size ( ) ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 删除位置( : , )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 删除位置(同步服务时传递更新后的列表)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
						 public   void   removePosition ( int   position )   { 	 public   void   removePosition ( int   position )   {  
			
		
	
		
		
			
				
					
							 if   ( position   <   0   | |   position   > =   mPositionList . size ( ) )   { 		 if   ( position   <   0   | |   position   > =   mPositionList . size ( ) )   {  
			
		
	
		
		
			
				
					
					             LogUtils . w ( TAG ,   " 删除位置失败:无效列表位置 (  "   +   position   +   " ) " ) ; 			 LogUtils . w ( TAG ,   " 删除位置失败:无效索引 (  "   +   position   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 return ; 			 return ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 PositionModel   removedModel   =   mPositionList . get ( position ) ; 		 PositionModel   removedModel   =   mPositionList . get ( position ) ;  
			
		
	
		
		
			
				
					
							 String   removedPosId   =   removedModel . getPositionId ( ) ; 		 String   removedPosId   =   removedModel . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
							 if   ( removedPosId   = =   null )   { 		 if   ( removedPosId   = =   null )   {  
			
		
	
		
		
			
				
					
					             LogUtils . w ( TAG ,   " 删除位置失败:待删除 位置ID为空( 列表位置 = "   +   position   +   " ) " ) ; 			 LogUtils . w ( TAG ,   " 删除位置失败: ( 索引 = "   +   position   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 return ; 			 return ;  
			
		
	
		
		
			
				
					
					         } 		 } // 1. 清理本地映射  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 1. 清理本地缓存和映射  
			
		
	
		
		
	
		
		
			
				
					
							 mVisibleDistanceViews . remove ( removedPosId ) ; 		 mVisibleDistanceViews . remove ( removedPosId ) ;  
			
		
	
		
		
			
				
					
							 mPositionIdToIndexMap . remove ( removedPosId ) ; 		 mPositionIdToIndexMap . remove ( removedPosId ) ;  
			
		
	
		
		
			
				
					
					         LogUtils . d ( TAG ,   " 删除位置: (  "   +   removedPosId   +   " ) " ) ; 		 LogUtils . d ( TAG ,   " 删除位置: (  "   +   removedPosId   +   " ) " ) ; // 2. 重新同步剩余位置的索引  
			
				
				
			
		
	
		
		
			
				
					
							 Iterator   modelIterator   =   mPositionList . iterator ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         // 2. 重新同步剩余位置的索引映射( : )   
			
		
	
		
		
			
				
					
					         Iterator < PositionModel >   modelIterator   =   mPositionList . iterator ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 int   index   =   0 ; 		 int   index   =   0 ;  
			
		
	
		
		
			
				
					
							 while   ( modelIterator . hasNext ( ) )   { 		 while   ( modelIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					             PositionModel   remainingModel   =   modelIterator . next ( ) ; 			 PositionModel   remainingModel   =  ( PositionModel )  modelIterator . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 mPositionIdToIndexMap . put ( remainingModel . getPositionId ( ) ,   index ) ; 			 mPositionIdToIndexMap . put ( remainingModel . getPositionId ( ) ,   index ) ;  
			
		
	
		
		
			
				
					
								 index + + ; 			 index + + ;  
			
		
	
		
		
			
				
					
					         } 		 } // 3. 清理任务数据  
			
				
				
			
		
	
		
		
			
				
					
							 Iterator   taskIterator   =   mAllPositionTasks . iterator ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         // 3. 清理全局任务列表和映射表( : )   
			
		
	
		
		
			
				
					
					         Iterator < PositionTaskModel >   taskIterator   =   mAllPositionTasks . iterator ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 while   ( taskIterator . hasNext ( ) )   { 		 while   ( taskIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					             PositionTaskModel   task   =   taskIterator . next ( ) ; 			 PositionTaskModel   task   =  ( PositionTaskModel )  taskIterator . next ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 if   ( task   ! =   null   & &   removedPosId . equals ( task . getPositionId ( ) ) )   { 			 if   ( task   ! =   null   & &   removedPosId . equals ( task . getPositionId ( ) ) )   {  
			
		
	
		
		
			
				
					
									 taskIterator . remove ( ) ; 				 taskIterator . remove ( ) ;  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 mPositionTaskMap . remove ( removedPosId ) ; 		 mPositionTaskMap . remove ( removedPosId ) ;  
			
		
	
		
		
			
				
					
							 mPositionList . remove ( position ) ; 		 mPositionList . remove ( position ) ;  
			
		
	
		
		
			
				
					
					         LogUtils . d ( TAG ,   " 删除位置:清理任务数据(位置ID= "   +   removedPosId   +   " ) , 总 数= "   +   mPositionList . size ( ) ) ; 		 LogUtils . d ( TAG ,   " 删除位置:清理任务数据(剩余列表数= "   +   mPositionList . size ( )   +   " ) " ) ; // 4. 同步服务(传递更新后的列表)  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 4. 同步服务  
			
		
	
		
		
	
		
		
			
				
					
							 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 		 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
					             mDistanceService . syncPositionList ( mPositionList ) ; 			 mDistanceService . syncPositionList ( mPositionList ) ;   // 同步删除后的列表  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ; 			 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;  
			
		
	
		
		
			
				
					
								 mDistanceService . removeVisibleDistanceView ( removedPosId ) ; 			 mDistanceService . removeVisibleDistanceView ( removedPosId ) ;  
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " 删除位置:同步服务数据 (  "   +   removedPosId   +   " ) " ) ; 			 LogUtils . d ( TAG ,   " 删除位置:同步到 服务(  "   +   removedPosId   +   " ) " ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         } 		 } notifyItemRemoved ( position ) ;  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 刷新视图  
			
		
	
		
		
			
				
					
					         notifyItemRemoved ( position ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 notifyItemRangeChanged ( position ,   mPositionList . size ( ) ) ; 		 notifyItemRangeChanged ( position ,   mPositionList . size ( ) ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 更新所有位置( : )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 更新所有位置(传递原列表引用,清理无效映射)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
					     public   void   updateAllPositions ( ArrayList < PositionModel >   newPositionList )   { 	 public   void   updateAllPositions ( ArrayList   newPositionList )   {  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 if   ( newPositionList   = =   null )   { 		 if   ( newPositionList   = =   null )   {  
			
		
	
		
		
			
				
					
					             LogUtils . e ( TAG ,   " 更新所有位置失败:新位置 列表为空 " ) ; 			 LogUtils . e ( TAG ,   " 更新所有位置失败:新列表为空 " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 return ; 			 return ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 mPositionList . clear ( ) ; 		 mPositionList . clear ( ) ;  
			
		
	
		
		
			
				
					
							 mPositionList . addAll ( newPositionList ) ; 		 mPositionList . addAll ( newPositionList ) ;  
			
		
	
		
		
			
				
					
					         LogUtils . d ( TAG ,   " 更新所有位置:接收新列表(数量= "   +   newPositionList . size ( )   +   " ) " ) ; 		 LogUtils . d ( TAG ,   " 更新所有位置:接收新列表(数量= "   +   newPositionList . size ( )   +   " ) " ) ; // 1. 清理无效可见控件  
			
				
				
			
		
	
		
		
			
				
					
							 Iterator   distanceViewIter   =   mVisibleDistanceViews . keySet ( ) . iterator ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         // 1. 清理本地无效可见控件( :   
			
		
	
		
		
			
				
					
					         Iterator < String >   distanceViewIter   =   mVisibleDistanceViews . keySet ( ) . iterator ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
							 while   ( distanceViewIter . hasNext ( ) )   { 		 while   ( distanceViewIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					             String   posId   =   distanceViewIter . next ( ) ; 			 String   posId   =  ( String )  distanceViewIter . next ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					             boolean   isPos Exist   =   false ; 			 boolean   isExist   =   false ;  
			
				
				
			
		
	
		
		
			
				
					
								 Iterator   modelIter   =   newPositionList . iterator ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					             Iterator < PositionModel >   modelIter   =   newPositionList . iterator ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
								 while   ( modelIter . hasNext ( ) )   { 			 while   ( modelIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					                 PositionModel   model   =   modelIter . next ( ) ; 				 if   ( posId . equals ( ( ( PositionModel ) modelIter . next ( ) ) . getPositionId ( ) ) )   {  
			
				
				
			
		
	
		
		
			
				
					
					                 if   ( posId . equals ( model . getPositionId ( ) ) )   { 					 isExist   =   true ;  
			
				
				
			
		
	
		
		
			
				
					
					                     isPosExist   =   true ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
										 break ; 					 break ;  
			
		
	
		
		
			
				
					
									 } 				 }  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
								 if   ( ! isExist )   {  
			
				
				
			
		
	
		
		
			
				
					
					             if   ( ! isPosExist )   {  
			
		
	
		
		
	
		
		
			
				
					
									 distanceViewIter . remove ( ) ; 				 distanceViewIter . remove ( ) ;  
			
		
	
		
		
			
				
					
					                 LogUtils . d ( TAG ,   " 更新所有位置:清理无效可见 控件(  "   +   posId   +   " ) " ) ; 				 LogUtils . d ( TAG ,   " 更新所有位置: (  "   +   posId   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
					         } 		 } // 2. 清理无效任务映射  
			
				
				
			
		
	
		
		
			
				
					
							 Iterator   taskMapIter   =   mPositionTaskMap . keySet ( ) . iterator ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         // 2. 清理任务映射表无效项( : )  		 while   ( taskMapIter . hasNext ( ) )   {  
			
				
				
			
		
	
		
		
			
				
					
					         Iterator < String >   taskMapKeyIter   =   mPositionTaskMap . keySet ( ) . iterator ( ) ; 			 String   posId   =   ( String ) taskMapIter . next ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         while   ( taskMapKeyIter . hasNext ( ) )   { 			 boolean   isExist   =   false ;  
			
				
				
			
		
	
		
		
			
				
					
					             String   posId   =   taskMapKeyIter . next ( ) ; 			 Iterator   modelIter   =   newPositionList . iterator ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					             boolean   isPosExist   =   false ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					             Iterator < PositionModel >   modelIter   =   newPositionList . iterator ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
								 while   ( modelIter . hasNext ( ) )   { 			 while   ( modelIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					                 PositionModel   model   =   modelIter . next ( ) ; 				 if   ( posId . equals ( ( ( PositionModel ) modelIter . next ( ) ) . getPositionId ( ) ) )   {  
			
				
				
			
		
	
		
		
			
				
					
					                 if   ( posId . equals ( model . getPositionId ( ) ) )   { 					 isExist   =   true ;  
			
				
				
			
		
	
		
		
			
				
					
					                     isPosExist   =   true ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
										 break ; 					 break ;  
			
		
	
		
		
			
				
					
									 } 				 }  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
								 if   ( ! isExist )   {  
			
				
				
			
		
	
		
		
			
				
					
					             if   ( ! isPosExist )   { 				 taskMapIter . remove ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                 taskMapKeyIter . remove ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
									 LogUtils . d ( TAG ,   " 更新所有位置: (  "   +   posId   +   " ) " ) ; 				 LogUtils . d ( TAG ,   " 更新所有位置: (  "   +   posId   +   " ) " ) ;  
			
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
					         } 		 } // 3. 重新初始化索引映射  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 3. 重新初始化索引映射( : , )   
			
		
	
		
		
	
		
		
			
				
					
							 mPositionIdToIndexMap . clear ( ) ; 		 mPositionIdToIndexMap . clear ( ) ;  
			
		
	
		
		
			
				
					
							 for   ( int   i   =   0 ;   i   <   newPositionList . size ( ) ;   i + + )   { 		 for   ( int   i   =   0 ;   i   <   newPositionList . size ( ) ;   i + + )   {  
			
		
	
		
		
			
				
					
					             PositionModel   model   =   newPositionList . get ( i ) ; 			 PositionModel   model   =  ( PositionModel )  newPositionList . get ( i ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 String   posId   =   model . getPositionId ( ) ; 			 String   posId   =   model . getPositionId ( ) ;  
			
		
	
		
		
			
				
					
								 mPositionIdToIndexMap . put ( posId ,   i ) ; 			 mPositionIdToIndexMap . put ( posId ,   i ) ;  
			
		
	
		
		
			
				
					
					             // 初始化新位置的任务列表(若不存在)  // 初始化新位置的任务列表  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 if   ( ! mPositionTaskMap . containsKey ( posId ) )   { 			 if   ( ! mPositionTaskMap . containsKey ( posId ) )   {  
			
		
	
		
		
			
				
					
					                 mPositionTaskMap . put ( posId ,   new   ArrayList < PositionTaskModel > ( ) ) ; 				 mPositionTaskMap . put ( posId ,   new   ArrayList ( ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                 LogUtils . d ( TAG ,   " 更新所有位置:初始化新位置 任务列表(  "   +   posId   +   " ) " ) ; 				 LogUtils . d ( TAG ,   " 更新所有位置: (  "   +   posId   +   " ) " ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
					         } 		 } // 4. 同步服务(传递原列表引用)  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 4. 同步服务  
			
		
	
		
		
	
		
		
			
				
					
							 if   ( isServiceBound   & &   mDistanceService   ! =   null )   { 		 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
					             mDistanceService . syncPositionList ( mPositionList ) ; 			 mDistanceService . syncPositionList ( mPositionList ) ;   // 同步更新后的列表  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 mDistanceService . clearVisibleDistanceViews ( ) ; 			 mDistanceService . clearVisibleDistanceViews ( ) ;  
			
		
	
		
		
			
				
					
					             // 同步有效可见控件( : )  // 同步有效可见控件  
			
				
				
			
		
	
		
		
			
				
					
					             Iterator < String >   validPosIter   =   mVisibleDistanceViews . keySet ( ) . iterator ( ) ; 			 Iterator   validPosIter   =   mVisibleDistanceViews . keySet ( ) . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
								 while   ( validPosIter . hasNext ( ) )   { 			 while   ( validPosIter . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					                 mDistanceService . addVisibleDistanceView ( validPosIter . next ( ) ) ; 				 mDistanceService . addVisibleDistanceView ( ( String ) validPosIter . next ( ) ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 } 			 }  
			
		
	
		
		
			
				
					
					             LogUtils . d ( TAG ,   " 更新所有位置:同步服务数据 (可见控件数量 = "   +   mVisibleDistanceViews . size ( )   +   " ) " ) ; 			 LogUtils . d ( TAG ,   " 更新所有位置:同步到 服务(可见控件数= "   +   mVisibleDistanceViews . size ( )   +   " ) " ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         } 		 } notifyDataSetChanged ( ) ;  
			
				
				
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					         // 刷新视图  
			
		
	
		
		
			
				
					
					         notifyDataSetChanged ( ) ;  
			
		
	
		
		
	
		
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 批量切换简单视图( : )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 批量切换简单视图  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
						 public   void   switchAllToSimpleView ( )   { 	 public   void   switchAllToSimpleView ( )   {  
			
		
	
		
		
			
				
					
					         Iterator < PositionModel >   modelIterator   =   mPositionList . iterator ( ) ; 		 Iterator   modelIterator   =   mPositionList . iterator ( ) ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 while   ( modelIterator . hasNext ( ) )   { 		 while   ( modelIterator . hasNext ( ) )   {  
			
		
	
		
		
			
				
					
					             PositionModel   model   =   modelIterator . next ( ) ; 			 ( ( PositionModel ) modelIterator . next ( ) ) . setIsSimpleView ( true )  
			
				
				
			
		
	
		
		
			
				
					
					             model . setIsSimpleView ( true ) ;  
			
		
	
		
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
							 notifyDataSetChanged ( ) ; 		 notifyDataSetChanged ( ) ;  
			
		
	
		
		
			
				
					
							 LogUtils . d ( TAG ,   " 批量切换简单视图:已切换所有位置(总数= "   +   mPositionList . size ( )   +   " ) " ) ; 		 LogUtils . d ( TAG ,   " 批量切换简单视图:已切换所有位置(总数= "   +   mPositionList . size ( )   +   " ) " ) ;  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /** 	 /**  
			
		
	
		
		
			
				
					
					     * 获取位置列表( : , )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
						 - 获取位置列表(返回新列表,避免外部修改原引用)  
			
		
	
		
		
			
				
					
						 */ 	 */  
			
		
	
		
		
			
				
					
					     public   ArrayList < PositionModel >   getPositionList ( )   { 	 public   ArrayList   getPositionList ( )   {  
			
				
				
			
		
	
		
		
			
				
					
					         return   new   ArrayList < PositionModel > ( mPositionList ) ; 		 return   new   ArrayList ( mPositionList ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
					// ---------------------- ViewHolder 定义( )  // ---------------------- ViewHolder 定义( )   
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -860,7 +869,7 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
							 public   SimpleViewHolder ( @NonNull   View   itemView )   { 		 public   SimpleViewHolder ( @NonNull   View   itemView )   {  
			
		
	
		
		
			
				
					
								 super ( itemView ) ; 			 super ( itemView ) ;  
			
		
	
		
		
			
				
					
					             // Java7:  显式  findViewById +  类型转换//  显式findViewById+ 类型转换( )  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 tvSimpleLongitude   =   ( TextView )   itemView . findViewById ( R . id . tv_simple_longitude ) ; 			 tvSimpleLongitude   =   ( TextView )   itemView . findViewById ( R . id . tv_simple_longitude ) ;  
			
		
	
		
		
			
				
					
								 tvSimpleLatitude   =   ( TextView )   itemView . findViewById ( R . id . tv_simple_latitude ) ; 			 tvSimpleLatitude   =   ( TextView )   itemView . findViewById ( R . id . tv_simple_latitude ) ;  
			
		
	
		
		
			
				
					
								 tvSimpleMemo   =   ( TextView )   itemView . findViewById ( R . id . tv_simple_memo ) ; 			 tvSimpleMemo   =   ( TextView )   itemView . findViewById ( R . id . tv_simple_memo ) ;  
			
		
	
	
		
		
			
				
					
					
						
					 
					@@ -873,32 +882,74 @@ public class PositionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
 
			
		
	
		
		
			
				
					
							 TextView   tvEditLongitude ; 		 TextView   tvEditLongitude ;  
			
		
	
		
		
			
				
					
							 TextView   tvEditLatitude ; 		 TextView   tvEditLatitude ;  
			
		
	
		
		
			
				
					
							 EditText   etEditMemo ; 		 EditText   etEditMemo ;  
			
		
	
		
		
			
				
					
							 TextView   tvEditRealDistance ;  
			
		
	
		
		
			
				
					
							 RadioGroup   rgRealDistanceSwitch ; 		 RadioGroup   rgRealDistanceSwitch ;  
			
		
	
		
		
			
				
					
					         RadioButton   rbDisable ;  
			
		
	
		
		
			
				
					
							 RadioButton   rbEnable ; 		 RadioButton   rbEnable ;  
			
		
	
		
		
			
				
					
					           btnEditDelet e; 		 Radio Button  rbDisabl e;  
			
				
				
			
		
	
		
		
			
				
					
					         Button   btnEditCancel ;  
			
		
	
		
		
			
				
					
					         Button   btnEditConfirm ;  
			
		
	
		
		
	
		
		
			
				
					
							 PositionTaskListView   ptlvEditTasks ; 		 PositionTaskListView   ptlvEditTasks ;  
			
		
	
		
		
			
				
					
							 Button   btnAddTask ; 		 Button   btnAddTask ;  
			
		
	
		
		
			
				
					
					         TextView   tv EditRealDistance ; 		 Button   btn EditConfirm ;  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
							 Button   btnEditCancel ;  
			
		
	
		
		
			
				
					
							 Button   btnEditDelete ;  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
							 public   EditViewHolder ( @NonNull   View   itemView )   { 		 public   EditViewHolder ( @NonNull   View   itemView )   {  
			
		
	
		
		
			
				
					
								 super ( itemView ) ; 			 super ( itemView ) ;  
			
		
	
		
		
			
				
					
					             // Java7:  显式  findViewById +  类型转换//  显式findViewById+ 类型转换( , )  
			
				
				
			
		
	
		
		
	
		
		
			
				
					
								 tvEditLongitude   =   ( TextView )   itemView . findViewById ( R . id . tv_edit_longitude ) ; 			 tvEditLongitude   =   ( TextView )   itemView . findViewById ( R . id . tv_edit_longitude ) ;  
			
		
	
		
		
			
				
					
								 tvEditLatitude   =   ( TextView )   itemView . findViewById ( R . id . tv_edit_latitude ) ; 			 tvEditLatitude   =   ( TextView )   itemView . findViewById ( R . id . tv_edit_latitude ) ;  
			
		
	
		
		
			
				
					
								 etEditMemo   =   ( EditText )   itemView . findViewById ( R . id . et_edit_memo ) ; 			 etEditMemo   =   ( EditText )   itemView . findViewById ( R . id . et_edit_memo ) ;  
			
		
	
		
		
			
				
					
								 tvEditRealDistance   =   ( TextView )   itemView . findViewById ( R . id . tv_edit_real_distance ) ;  
			
		
	
		
		
			
				
					
								 rgRealDistanceSwitch   =   ( RadioGroup )   itemView . findViewById ( R . id . rg_real_distance_switch ) ; 			 rgRealDistanceSwitch   =   ( RadioGroup )   itemView . findViewById ( R . id . rg_real_distance_switch ) ;  
			
		
	
		
		
			
				
					
					             rbDisable   =   ( RadioButton )   itemView . findViewById ( R . id . rb_disable ) ;  
			
		
	
		
		
			
				
					
								 rbEnable   =   ( RadioButton )   itemView . findViewById ( R . id . rb_enable ) ; 			 rbEnable   =   ( RadioButton )   itemView . findViewById ( R . id . rb_enable ) ;  
			
		
	
		
		
			
				
					
					             btnEditDelet e  =   ( Button )   itemView . findViewById ( R . id . btn_edit_delet e) ; 			 rbDisabl e  =   ( Radio Button)   itemView . findViewById ( R . id . rb_disabl e) ;  
			
				
				
			
		
	
		
		
			
				
					
					             btnEditCancel   =   ( Button )   itemView . findViewById ( R . id . btn_edit_cancel ) ;  
			
		
	
		
		
			
				
					
					             btnEditConfirm   =   ( Button )   itemView . findViewById ( R . id . btn_edit_confirm ) ;  
			
		
	
		
		
	
		
		
			
				
					
								 ptlvEditTasks   =   ( PositionTaskListView )   itemView . findViewById ( R . id . ptlv_edit_tasks ) ; 			 ptlvEditTasks   =   ( PositionTaskListView )   itemView . findViewById ( R . id . ptlv_edit_tasks ) ;  
			
		
	
		
		
			
				
					
								 btnAddTask   =   ( Button )   itemView . findViewById ( R . id . btn_add_task ) ; 			 btnAddTask   =   ( Button )   itemView . findViewById ( R . id . btn_add_task ) ;  
			
		
	
		
		
			
				
					
					             tvEditRealDistance   =   ( TextView )   itemView . findViewById ( R . id . tv _edit_real_distance ) ; 			 btnEditConfirm   =   ( Button )   itemView . findViewById ( R . id . btn _edit_confirm ) ;  
			
				
				
			
		
	
		
		
			
				
					
					         } 			 btnEditCancel   =   ( Button )   itemView . findViewById ( R . id . btn_edit_cancel ) ;  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
								 btnEditDelete   =   ( Button )   itemView . findViewById ( R . id . btn_edit_delete ) ;  
			
		
	
		
		
			
				
					
							 } 		 }  
			
		
	
		
		
			
				
					
						 } 	 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /**  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 - 辅助方法: ( )   
			
		
	
		
		
			
				
					
						 */  
			
		
	
		
		
			
				
					
						 public   ArrayList   getTasksByPositionId ( String   positionId )   {  
			
		
	
		
		
			
				
					
							 ArrayList   tasks   =   getSafeTasks ( positionId ) ;  
			
		
	
		
		
			
				
					
							 return   new   ArrayList ( tasks ) ;   // 返回拷贝,避免外部修改原数据  
			
		
	
		
		
			
				
					
						 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /**  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 - 辅助方法:清空所有数据(适配服务同步)  
			
		
	
		
		
			
				
					
						 */  
			
		
	
		
		
			
				
					
						 public   void   clearAllData ( )   {  
			
		
	
		
		
			
				
					
							 mPositionList . clear ( ) ;  
			
		
	
		
		
			
				
					
							 mAllPositionTasks . clear ( ) ;  
			
		
	
		
		
			
				
					
							 mPositionTaskMap . clear ( ) ;  
			
		
	
		
		
			
				
					
							 mVisibleDistanceViews . clear ( ) ;  
			
		
	
		
		
			
				
					
							 mPositionIdToIndexMap . clear ( ) ; // 同步服务清理  
			
		
	
		
		
			
				
					
							 if   ( isServiceBound   & &   mDistanceService   ! =   null )   {  
			
		
	
		
		
			
				
					
								 mDistanceService . syncPositionList ( mPositionList ) ;  
			
		
	
		
		
			
				
					
								 mDistanceService . syncAllPositionTasks ( mAllPositionTasks ) ;  
			
		
	
		
		
			
				
					
								 mDistanceService . clearVisibleDistanceViews ( ) ;  
			
		
	
		
		
			
				
					
								 LogUtils . d ( TAG ,   " 清空所有数据:同步服务完成 " ) ;  
			
		
	
		
		
			
				
					
							 } notifyDataSetChanged ( ) ;  
			
		
	
		
		
			
				
					
							 LogUtils . d ( TAG ,   " 清空所有数据:本地数据已重置 " ) ;  
			
		
	
		
		
			
				
					
						 }  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 /**  
			
		
	
		
		
			
				
					
					 
			
		
	
		
		
			
				
					
						 - 生命周期方法:解绑服务(避免内存泄漏,供外部调用)  
			
		
	
		
		
			
				
					
						 */  
			
		
	
		
		
			
				
					
						 public   void   onDestroy ( )   {  
			
		
	
		
		
			
				
					
							 unbindDistanceRefreshService ( ) ;  
			
		
	
		
		
			
				
					
					// 释放强引用  
			
		
	
		
		
			
				
					
							 mContext   =   null ;  
			
		
	
		
		
			
				
					
							 mCurrentGpsPosition   =   null ;  
			
		
	
		
		
			
				
					
							 mOnDeleteClickListener   =   null ;  
			
		
	
		
		
			
				
					
							 mOnSavePositionClickListener   =   null ;  
			
		
	
		
		
			
				
					
							 mOnSavePositionTaskClickListener   =   null ;  
			
		
	
		
		
			
				
					
							 LogUtils . d ( TAG ,   " Adapter生命周期结束:  " ) ;  
			
		
	
		
		
			
				
					
						 }  
			
		
	
		
		
			
				
					
					}