2014-02-19 102 views
3

我有一個用於listview的自定義適配器。 listview有一個複選框,但當我向下滾動然後向上滾動時,複選框不會保持被選中狀態。我有一個模型,並在模型中爲「選定」布爾值。這是我的適配器,任何人都可以告訴我我做錯了什麼?我已經嘗試了多次,似乎沒有任何工作。未選中複選框自定義適配器

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     View row = convertView; 
     if(convertView == null){ 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.list_item_row_friends, null); 

      CheckBox friend_checkbox = (CheckBox)row.findViewById(R.id.friends_checkbox); 


      if(data.get(position).selected) { 
       friend_checkbox.setChecked(true); 
      } else { 
       friend_checkbox.setChecked(false); 
      } 
     } 
CheckBox friend_checkbox = (CheckBox)row.findViewById(R.id.friends_checkbox); 
     friend_checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       data.get(position).setSelected(isChecked); 
       Log.d("FriendAdapter", data.get(position).selected + ""); 
      } 
     }); 
+1

發生bcoz listview回收views.https://groups.google.com/forum/#!topic/android-developers/No0LrgJ6q2M – Raghunandan

回答

1

正如Raghunandan建議,出現這種情況是因爲ListView的回收意見,所以convertView可能不是空的大部分時間。試試這個:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    if(convertView == null){ 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.list_item_row_friends, null); 
    } 
    CheckBox friend_checkbox = (CheckBox)row.findViewById(R.id.friends_checkbox); 
    friend_checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      data.get(position).setSelected(isChecked); 
      Log.d("FriendAdapter", data.get(position).selected + ""); 
     } 
    }); 
    if(data.get(position).selected) { 
     friend_checkbox.setChecked(true); 
    } else { 
     friend_checkbox.setChecked(false); 
    } 
} 
相關問題