我正在使用Guice(Roboguice v2与Guice v3完全相同),我对它有点新鲜。
我有一个单身..
@Singleton
Accounts
{
public Account[] getAllAccounts()
{
// Stuff
}
}
我还有一个类需要在构造函数中访问上面的内容。
public class AccountListAdapter extends ArrayAdapter<Account>
{
public AccountListAdapter(Context c)
{
super(c, R.layout.account_list_row, R.id.accountName, accounts.getAllAccounts());
}
...
}
如何访问上面用作super()调用的最后一个参数的Accounts单例?因为构造函数将在创建任何实例变量之前执行。
谢谢!
答案 0 :(得分:2)
你可以处理这两种方式。
首先,您可以将适配器直接注入您的Activity。这将包括当前的Context以及singelton:
public class ExampleActivity extends RoboActivity{
@Inject
private AccountListAdapter accountListAdapter;
....
//then register it with your listView in your onCreate()
}
请记住,您需要添加以下注释:
public class AccountListAdapter extends ArrayAdapter<Account>
{
@Inject
public AccountListAdapter(Context c, Accounts acconts)
{
super(c, R.layout.account_list_row, R.id.accountName, accounts.getAllAccounts());
}
...
}
其次,您可以在onCreate()期间自己构造对象:
public class ExampleActivity extends RoboActivity{
@Inject
private Account accounts;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AccountListAdapter accountListAdapter = new AccountListAdapter(this, accounts);
//then register it with your listView
}
您可能必须扩展Roboguice ListActivity而不是RoboActivity才能成功使用ListActivity。如果这对您有用,请告诉我。