我有一個帶有BaseAdapter的ListView。我想更新列表中的一些項目而不刷新內容。爲了實現這一點,我使用觀察者模式。我有一個Observable對象,列表中的每個項目都是觀察者。適配器上的檢測項目視圖已被破壞
public View getView(final int position, View convertView, final ViewGroup parent) {
final ItemViewHolder holder;
final Item item = (Item) getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item, parent, false);
/* ADD VIEWS TO HOLDER */
holder = new ItemViewHolder();
convertView.setTag(holder);
ItemObserver observer = new ItemObserver(holder, context);
mapObservers.put(holder, observer);
observable.addObserver(observer);
} else {
holder = (ItemViewHolder) convertView.getTag();
}
//Set values into view etc...
return convertView;
}
這很好,但問題是:我怎麼知道觀察員不再需要?我想要檢測給定視圖何時被銷燬,以便從Map中獲取觀察者並將其從Observable對象中刪除。視圖被銷燬時是否有任何監聽器被調用?
我試過AbsListView.RecyclerListener.onMovedToScrapHeap(View view)
但它似乎在視圖回收時調用。
謝謝!
同樣的問題。我嘗試覆蓋onDetachedFromWindow,但是當我向上和向下滾動時,它從來沒有被調用過。 – jiashie 2014-10-21 01:47:09
我的意思是項目視圖應該擴展android視圖,而不是ListView。 – Borzh 2014-12-02 18:40:03
(downvoted)看到我的答案http://stackoverflow.com/a/31719879/1377145 – 2015-07-30 09:22:34