2016-12-27 52 views
0

我有一個ListViewCheckboxFragment延伸FragmentList。奇怪的行爲是當單擊一個項目時檢查多個項目。 奇怪的是,當列表滾動時,某些項目會自動選擇或取消選擇,並且我沒有設置ScrollListener片段ListView與複選框奇怪的行爲

下面的代碼:

@Override 
public void onStart() { 
    super.onStart(); 
    getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.chk); 
      if (mCheckBox.isChecked()) { 
       mCheckBox.setChecked(false); 
       getListView().setItemChecked(i, false); 
      } else { 
       mCheckBox.setChecked(true); 
       getListView().setItemChecked(i, true); 
      } 
      mCallback.onArticleSelected(i, isChoice); 
     } 
    }); 
} 

要求: image http://windrealm.org/tutorials/android/planets-fragmentactivity.png

+0

Listview的視圖被回收。如果listview以已選中狀態回收視圖,則新視圖將處於選中狀態。因此,您需要將檢查的狀態保存爲列表,並在創建時更新視圖。大多數情況下,我們使用SparseBooleanArray。 –

回答

0

ListView的,而你是滾動項目回收。你應該把一個boolean參數(isChecked)添加到你的ListView行對象中,然後在你的getView方法中,你應該用boolean參數初始化你的CheckBox。例如:

假設你行對象:

public class Trial{ 

    public String title; 

    public boolean isChecked; 

} 

在你ListView適配器的getView方法,你應該檢查isChecked參數的對象:

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

    LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
    View view = inflater.inflate(R.layout.your_listview_item, parent, false); 

    Trial item = items.get(position); 

    yourHolder.checkBox = (CheckBox) view.findViewById(R.id.chk); 
    yourHolder.checkBox.setChecked(item.isChecked); 

    return view; 
} 

好運。

+0

因爲我擴展了'ListFragment',所以我沒有實現任何持有者或任何行對象。 「OnClick」在OnStart方法中設置,就像在帖子中顯示的一樣(編輯)。 – AlphaQ

+0

等等你在列表視圖中顯示什麼?你沒有任何物品清單? –

+0

這是一個帶有TextView和CheckBox的簡單列表。查看更新後的答案。 – AlphaQ