目前,我有一個自定義視圖:安卓:如何通過額外的對象引用自定義視圖
public class MyView extends View {
public MyView(Context c, AttributeSet attrs) {
super(context, attrs);
}
....
....
}
現在,我想訪問未安卓相關的對象,說一個數據庫連接,怎麼辦我那樣做? 我目前的解決辦法是做到以下幾點
public class MyView extends View {
DBConnection connection;
public MyView(Context c, AttributeSet attrs) {
super(context, attrs);
}
....
....
public void setDBConnection(DBConnection c)
this.connection = c;
}
public void onDraw(Canvas canvas) {
this.connection.ensureUser();
...
....
}
我的問題是有沒有更好的方式來做到這一點?目前我需要設置(通過setter)來確保將要在MyView類中使用的對象被設置,上面的代碼片段可以工作,但我不知道這是否是優雅/流行的方法?我想通過構造函數傳遞對象,但我不能這樣做,因爲Android只調用MyView(Context c,AttributeSets attrs)構造函數,它不會調用版本如果我有MyView(上下文c,AttributeSets attrs,DBConnection db)一個。
請幫助
嗨,尼克,感謝您的回覆。只是一個例子你給我一個使用注射的例子嗎?我有點懷疑使用注射....我的意思是它可能有效,但我仍然認爲這不是唯一的方法,因爲注射,說Guice,是需要的東西。我不認爲這是不尋常的,你需要傳遞一些東西(無論是一個對象或只是一個簡單的字符串)到一個自定義視圖... – user1118019 2012-02-14 18:43:05
對不起,我的意思是注射更一般。當你談論在構造函數中傳遞某些東西或使用setter時,它只是意味着視圖正在通過某人「插入」或「注入」它來獲取數據,而不是在內部查找其數據。考慮到這一點,如果您將List傳遞給顯示這些字符串的視圖,那麼它沒有太多邏輯。相反,如果您傳遞數據庫連接,則視圖必須包含使用該數據庫連接來查找所需數據的代碼。通常,後者類型的內部代碼類型的可重用性較差。 –
2012-02-14 21:10:41