2016-02-29 71 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());