今日、AndroidプロジェクトにMVC(または準MVC)アーキテクチャを導入できると言われました。主にユーザーによって入力された情報を含むクラスがいくつかあり、ビュー(TextView
議論のためにそうだと仮定して)にそれを表示したいと思います。私が最初に考えたのは、データを含むクラスを更新するたびに、それを自分のに反映するメソッドを呼び出すことTextView
でした。
Data d = new Data();
TextView t = (TextView) findViewById(R.id.IamTextView);
// ....
d.setS("Foo"); // <--- Data updated!
t.setText(d.getS()); // <--- View updated, too!
データが更新されるケースが非常に限られていて、それらがすべてどこにあるかを認識していれば問題ありませんが、これは間違いなく不十分ですが、もっとクールでスマートなものを試してみたいと思います。だから私はカスタムを定義していますEventListener
...
public class Data {
protected int i;
protected double d;
protected String s;
//Setter & Getter omitted!
}
public interface Data.onUpdatedListener {
public void onUpdated (Data d);
}
public class TestActivitiy extends Activity implements Data.onUpdatedListener {
Date[] d;
//onCreate() omitted!
@Override public void onUpdated (Data d) {
// I want to reflect this change on my Views, like below.
TextView t = (TextView) findViewById(R.id.IamTextView);
t.setText(d.getS());
}
}
Data
Controllerとして機能する専用のクラスを作成する必要があることはわかっています。その役割は、更新が発生し、それがどのオブジェクトであるかをActivityに通知することです(すべてのメンバー変数をのパラメーターとして作成するとonUpdated()
、非常に役立ちます。オブジェクト全体ではなく、アクティビティにのみ「違い」を送信できます)。
私の問題01:
更新のアクティビティを通知する方法(つまり、メソッドを起動する方法)がよくわかりませんonUpdated()
。
私の問題02: オブジェクトが更新されていることを確認する方法がわかりません。メンバーのいずれかが違う場合はお知らせしたいのですが、どうすればいいですか?オブジェクトの最新の状態を常に保持し、それらのすべてのメンバー変数を現在の変数のメンバー変数と比較する必要がありますか?