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