2011-02-03 34 views
2

我正在處理一個包含通用對象的ArrayList的Android類。我希望只要修改了所述ArrayList的某個元素就會觸發該類中的事件。當ArrayList元素修改時觸發事件

在一個理想的世界中,ArrayList的本身應該是一個私有成員,類將包含公共的方法來添加/更新/刪除的元素,一切都會很好,很正常。

不幸的是,該ArrayList露出作爲公共部件,所以它和它的元素被修改所有的地方(應用程序)。在不重寫代碼的小船負載和/或在代碼中進行泛泛的追逐的同時,我希望能夠在包含列表的類中修改ArrayList時觸發事件。有任何想法嗎?

回答

5

你也可以繼承ArrayList和觸發後它的一些方法被調用的行動(呼籲例如回調)。

然後用您的實現替換Android類中的原始ArrayList。

P.S.例如:

public class MyArrayList<E> extends ArrayList<E> { 

@Override 
public boolean add(E object) { 
    // Do some action here 
    return super.add(object); 
}; 

@Override 
public void add(int index, E object) { 
    super.add(index, object); 
    // Do some action here 
}; 

@Override 
public E remove(int index) { 
    // Do some action here 
    return super.remove(index); 
} 
// etc... 

}

由於ArrayList的子類,你不會得到任何錯誤,在你的代碼,而之前的一切工作,將沒有任何變化工作。 有了一點創意,班級可以變得更加優雅和高效,但總的想法就在那裏。

編輯:是的。對不起,這些回報有點倉促。修正了,謝謝Petar

+0

返回super.add(object); //在這裏做一些動作不會被執行。你必須捕獲super.add(object)的值;做你的東西,然後返回捕獲的值。 – 2011-02-03 14:16:20

相關問題