質問: こんにちは 質問はタイトルの通り「AndroidでActivity/ArrayAdapterを疎結合にするためには?」です。 ActivityとArrayAdapterがメソッドを相互に呼び合っている(循環参照)コードを書いてみました。 ActivityとArrayAdapterが循環参照の状態にあるのは、設計ミスなのかもしれません。 しかし、アプリに1箇所や2箇所、循環参照になっているところがあるんじゃないかなって思います。 ちなみに、Android歴2~3日なので、Androidプログラミングよくわかってませんorz 皆様方はAndroidで循環参照になった時に、どのようにプログラム書かれてますか? ArrayAdapterをFragmentと、読み替えて頂いても結構です。
回答: (回答の前提として、質問文章中の「循環参照」というのは、Activity内でAdapterのメソッドを呼び、また、Adapter内でActivityのメソッドを呼んでいることを指しているのだと理解しました。) ArrayAdapter(の継承元クラスであるBaseAdapter)には、管理データ(すなわち表示対象)変更時に通知を受け取るリスナが登録できます。 BaseAdapter#registerDataSetObserver(DataSetObserver)) 現在のコードにおいて、Adapter内で実装してしまっている循環参照処理をDataSetObserver内に移すことで、問題があると感じている事象を修正できないでしょうか。 例えば、ボタンを押した時の処理を、Buttonクラスを継承してそこに実装することは稀で、通常はOnClickListenerに実装し、それをリスナとしてボタンに登録しますよね。 ひとまずはそれと同じことだと考えると理解しやすいかと思います。 (※ 具体的なコードと、どの箇所が問題であると感じているのかという記述があれば、より具体的な回答を引き出せるかと思います。)