2016-02-29 72 views
0

我是Android开发的初学者。当我在此列表视图中垂直滚动时,会发生此问题。开关按钮自动改变状态。我该如何解决这个问题?代码如下所示:在列表视图中滚动时切换按钮更改状态

public class TrainerSessionAdapterView extends BaseAdapter { 
public TrainerSessionAdapterView(Context context) { 
    this.context = context; 
    inflater = LayoutInflater.from(this.context); 
    workoutList = new ArrayList<>(); 
    newSessionList = new ArrayList<>(); 
    type = context.getResources().getString(R.string.type); 
    other = context.getResources().getString(R.string.other); 
    objectID = context.getResources().getString(R.string.object_id); 
} 

    @Override 
    public int getCount() { 
    if (workoutList.isEmpty()) { 
     return 0; 
    } else { 
     return workoutList.size(); 
    } 

} 


@Override 
public ParseObject getItem(int position) { 
    return workoutList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    removeSession = new ArrayList<String>(); 
    trainerWorkoutList = (ArrayList<String>)user.get("trainer_workout_type"); 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.session_listview, parent, false); 
     holder = new ViewHolder(convertView); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    if (!workoutList.isEmpty() && position < workoutList.size() && change) { 
      ParseObject workoutObject = workoutList.get(position); 
      if (!TextUtils.isEmpty(workoutObject.get(type).toString())); 
      holder.sessionTypeView.setText(workoutObject.get(type).toString()); 
      if(trainerWorkoutList!=null && workoutObject.getObjectId()!=null){ 
       if (trainerWorkoutList.contains(workoutObject.getObjectId())){ 
        holder.sessionSwitch.setChecked(true); 
       } 
      } 
      else{ 
       holder.sessionSwitch.setChecked(false); 
      } 
     } 
    return convertView; 
} 
} 
+0

请发帖时使用的代码提供更多的细节。不允许将代码注释为解决最小字符要求的解决方法。 –

回答

0

你可以试试这个,

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     removeSession = new ArrayList<String>(); 
     trainerWorkoutList = (ArrayList<String>)user.get("trainer_workout_type"); 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.session_listview, parent, false); 
      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.sessionSwitch.setChecked(false); 

     if (!workoutList.isEmpty() && position < workoutList.size() && change) { 
       ParseObject workoutObject = workoutList.get(position); 
       if (!TextUtils.isEmpty(workoutObject.get(type).toString())); 

       holder.sessionTypeView.setText(workoutObject.get(type).toString()); 

       if(trainerWorkoutList!=null && workoutObject.getObjectId()!=null){ 
        if (trainerWorkoutList.contains(workoutObject.getObjectId())){ 
         holder.sessionSwitch.setChecked(true); 
        } 
       } 
      } 
     return convertView; 
    } 
} 
+1

由于您正在使用视图模式,您的视图正在被重用。因此女巫也被重复使用,其状态不同于您对该行所预期的状态。使用Hades的回答会将您的开关切换回错误状态,然后如果通过您的if循环满足所有标准,开关将切换到真实状态。 –

+0

感谢Hades和ragesh ramesh。 –

1

在getView方法中添加此行。

holder.switch.setChecked(ArrayList.get(position).isStudentPresent());