2016-06-24 4 views
0

Моя деятельность использует адаптер, который требует контекстКак передать приложение вместо контекста активности в адаптере AndroidAnnotations?

@EActivity 
public class MyActivity extends Activity { 

    @Bean 
    MyAdapter adapter; 

} 

адаптер сам по себе:

@EBean 
public class MyAdapter extends Adapter { 

    @RootContext 
    Context context; 

} 

Whn Я открываю сгенерированного деятельность, я вижу:

adapter = MyAdapter_.getInstance_(getActivity()); 

контекст деятельности утечка памяти. Я хочу изменить его на Application Context Я мог бы сделать это, используя setter, я полагаю, но мне нужно как-то это время, так что я могу заставить AndroidAnnotations передать контекст приложения?

+0

* Контекст активности утечки памяти. * Если вы не сделали бы что-то странное в своем адаптере, это не должно. Если контекст протекает, а это означает, что Adapter живет дольше. Activity = Strange stuff ... – Selvin

+0

Это правда, и я буду изучать его, но мой вопрос остается - как передать контекст приложения в адаптер, используя AndroidAnnotations –

ответ

1

Вы не можете передать приложение Context с @RootContext, но вы можете вводить объект приложения с @App:

@EApplication 
public class MyApp extends Application { 
    ... 
} 
// do not forget to register MyApp_ in the manifest 

@App 
MyApp myApp; 

Затем вы можете использовать его в качестве приложения Context.

+0

I только что выяснили, что у моего сгенерированного адаптера есть сгенерированный конструктор, который все равно принимает действие. И утечка происходит из-за того, что аннотированный метод «@ Background» продолжает работать в фоновом режиме, когда активность убита. Теперь, если бы у меня была власть над этим конструктором, я бы передал 'WeakReference ' вместо самой Activity, но я не :( –

+0

Но почему вы используете метод? Вы должны добавить для этого условие окончания. BTW, существует ['@ IgnoreWhen'] (https://github.com/excilys/androidannotations/wiki/IgnoredWhenDetached#ignorewhen), но для фрагментов. – WonderCsabo

+0

Метод загружает данные из БД для отображения в адаптере, но иногда, если пользователь слишком быстро отбрасывает активность, и действие продолжает работать. Посмотрите, что делает '@ IgnoreWhen', спасибо –