今天我被告知我們可以在我們的Android項目中引入一個MVC(或者準MVC)架構。我有一些類包含用戶主要輸入的信息,並且我希望我的視圖(爲了討論的緣故,假設它是TextView
)來顯示它。我最初的想法是,每當我更新包含數據的類時,我都會調用一個方法在我的TextView
上反映出來。Android:如何讓我自己的EventListener?
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
中的每個成員變量作爲參數onUpdated()
,這樣我只能將「差異」發送給「活動」,而不是「整體」。
我的問題01: 我比肯定知道如何通知我更新的活動度(換句話說,如何火onUpdated()
方法)。
我的文檔02: 我不確定如何確定一個對象被更新。如果任何成員不同,我想通知它,但如何?我們是否應該始終保持對象的最新狀態,並將其所有成員變量與當前變量的成員變量進行比較?
嘿,謝謝你的快速回答!你的建議似乎很好。但是,我應該把所有的'setVariables()'方法(在這種情況下,'setI()','setD()','setS()')放到'public void update(Data data)'方法中嗎?我的實際'Date'類有幾個相同類型的變量(int a,int b,int c,...),我不知道如何處理它們。 :( – Quv
看看編輯過的內容是否有幫助,在我看來,你在update方法中使用setI()等的建議實現是好的 –
再次感謝我試圖實現它,所以請稍等一下,直到我接受你的答案。 – Quv