我想製作一個列表視圖,其中一個項目包含一個文本和一個複選框,對於複選框偵聽器,我想使用onCheckedChange。我不明白這個監聽器的行爲,因爲當我從列表頂部檢查一個項目,然後向下滾動並返回到頂部時,我的複選框狀態未被選中,但如果我使用列表進行更多操作,它似乎可以工作一般。我不明白,如果我使用不合適的onCheckedChangeListener或它是一個普遍的問題。 因此,這裏是我的代碼的一部分:ListView中的OnCheckedChangeListener
public View getView(int position, View convertView, ViewGroup parent) {
PickerItemDto item = items.get(position);
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.picker_item, null);
ViewHolder viewHolder = new ViewHolder(convertView);
viewHolder.checkboxChange= new OnCheckboxChange();
viewHolder.cbSelectFriend.setOnCheckedChangeListener(viewHolder.checkboxChange);
convertView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.tvName.setText(item.getName());
holder.cbSelectFriend.setChecked(item.isChecked());
holder.cbSelectFriend.setTag(item);}
private class OnCheckboxChange implements CompoundButton.OnCheckedChangeListener {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
CheckBox cb= (CheckBox) buttonView;
PickerItemDto item = (PickerItemDto) cb.getTag();
item.setChecked(isChecked);
}}
雖然我測試至今,這個問題是因爲onCheckboxChanged被多次調用,當我scoll列表和器isChecked價值在於「假」的,也就是說,我已經檢查過。 我知道我可以使用onClickListener,但我需要onCheckBoxChange,因爲我想使用只有此偵聽器可用的庫。
任何人都可以解釋我的錯在哪裏嗎?由於
你確定'setChecked'被分配您提供的參數值? – Blackbelt
是的。問題是,當我檢查一個項目,在偵聽器中設置item.setChecked(true),但是當我滾動onCheckedChanged再次調用相同的元素,我檢查,但現在isChecked參數是false ..可能這個事件不是爲這種用法而設計的? –