Доступ к синглтону Guice в конструкторе - PullRequest
0 голосов
/ 09 марта 2012

Я использую 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 ()? Поскольку конструктор будет выполняться до создания любых переменных экземпляра.

Спасибо!

1 Ответ

2 голосов
/ 09 марта 2012

Вы можете справиться с этим двумя способами.

Сначала вы можете добавить Адаптер непосредственно в свою активность. Это будет включать в себя текущий контекст, а также 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
 }

Возможно, вам придется расширить RobAguice ListActivity вместо RoboActivity, чтобы успешно использовать ListActivity. Дайте мне знать, если это работает для вас.

...