Android:如何将其他对象引用传递给自定义视图

时间:2012-02-14 02:23:57

标签: android object view custom-controls ondraw

目前我有自定义视图:

public class MyView extends View {

  public MyView(Context c, AttributeSet attrs) {
    super(context, attrs);

  }
    ....
    ....
}

现在,我想访问一个与Android无关的对象,比如数据库连接,我该怎么做? 我目前的解决方案是执行以下操作

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(Context c, AttributeSets attrs, DBConnection db)一个,它就不会调用该版本

请帮助

1 个答案:

答案 0 :(得分:1)

当我遇到这样的情况时,我倾向于在创建视图后采用注入可显示数据的方法。因此,如果您的视图需要显示一串文本,则在创建活动期间通过使用View查找findViewById然后调用相应的setter来注入该字符串或从中拉出字符串的对象

至于“有没有更好的方法”,我会担心将dbconnection传递给视图类。它没有通过“气味”测试,似乎你正在将你的逻辑泄漏到你的视野中。对我来说更有意义的是,在Cursor内为您的观点提供Activity或某些您填写的对象。这可以防止构建与特定用途/场景紧密耦合的自定义视图。

另一方面,您必须决定您希望视图的可重用性。对于这个特定的项目来说,快速和肮脏是适当的机智。