2012-12-28 175 views
0

我有一個類的行,它擴展RelativeLayout並膨脹一些佈局自我。 A CheckBox檢查狀態監聽器也被設置。ListView與自定義ArrayAdapter

public class LayersListRow extends RelativeLayout {   

    public LayersListRow (Context context, final GITuple tuple) { 
    super(context); 
    LayoutInflater.from(context).inflate(R.layout.layers_list_item, this, true); 
     ... 

    CheckBox checkbox = (CheckBox)findViewById(R.id.layers_list_item_switch); 

    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) { 
     ... 
     } 
    }); 
    } 
    ... 
} 

我有一個自定義ArrayAdapter,這是充滿了這個類的一些對象。我也想用它們作爲視圖。

public class LayersAdapter extends ArrayAdapter<LayersListRow> { 

    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     return getItem(position); 
    } 

    public LayersAdapter (Context context, int resource, int textViewResourceId) { 
     super(context, resource, textViewResourceId); 
    } 
} 

但當我這個適配器設置爲我ListViewCheckBox的監聽器不起作用。但對於出現在向下滾動的項目,它工作正常。

如果我

if (null == convertView) 
    return getItem(position); 

return convertedView; 

然後在列表中的第聽衆的偉大工程中所有可見的物品代替return getItem(position);getView方法,但是當我嘗試滾動我(又是第一個)拿錯物品,ListView凍結,不迴應。

爲什麼會發生這種情況,應該如何使其正常工作?

+0

您是否介意發佈適配器的整個代碼? – Luksprog

+0

@Luksprog它是我的'LayersAdapter'類的整個代碼:) –

+0

我對'getItem(position)'方法感興趣。 – Luksprog

回答

0

當您使用此

if (null == convertView) 
    return getItem(position); 

return convertedView; 

被重用的視圖。因此,當您滾動第一次顯示的視圖時,將再次顯示。

我會建議你看看我在這篇文章中寫的答案。如果你不能按照它在這裏發表評論。

Get checked Listitems from ListView and pass that to another activity

相關問題