2011-02-03 21 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(オブジェクト); //ここで何らかのアクションを実行しませんか? super.add(object)の値を取得する必要があります。あなたのものをして、キャプチャされた価値を返す。 –

関連する問題