我創造的ListView這就需要一個繼承ListAdapter(CustomAdapter)一個專門的適配器的子類。我想保留setAdapter和getAdapter方法,因爲它們是程序員期望與AdapterView一起使用的標準方法。ListView的子類自定義適配器:基本的Java Q
我可以重寫,吸氣:
@Override
public CustomAdapter getAdapter() {...}
因爲它仍然會返回一個ListAdapter。不過,我無法覆蓋setter:
@Override
public void setAdapter(CustomAdapter adapter) {...}
我得到爲什麼Java不會讓我這樣做。所以要解決它,現在,我這樣做:
@Override
public void setAdapter(ListAdapter adapter) {
throw new UnsupportedOperationException("adapter must be an instance of CustomAdapter");
}
public void setAdapter(CustomAdapter adapter) {
this.adapter = adapter;
}
我不認爲這是一個大問題,但它有點蟲子我。仍然暴露原始ListAdapter設置器(尤其是因爲它顯示在自動完成列表中)似乎不夠雅觀。有沒有什麼辦法可以壓制原來的setter,或者是上面的block是否做到這一點的正確方法?
感謝,
我很感興趣,有什麼特別之處CustomAdapter的ListAdapter impls不能做? – user802421 2011-12-27 00:38:51
自定義listView是一個向下鑽取列表,所以customAdapter需要公開在數據層次結構中向上或向下移動的方法(其中涉及到懶惰讀取數據) – noobler 2011-12-29 14:42:48