2011-01-16 2 views
1

У меня есть приложение, и в одном из моих действий я создал базовую активность, которая содержит некоторые вспомогательные методы, которые могут использовать производные классы.Попытка ленивой загрузки андроида с использованием генераторов

У меня есть метод, что взгляды ленивые нагрузки, вот код

protected <T extends View> void loadView(T view, int id) { 
    if(view == null){ 
     view = (T)findViewById(id); 
    } 

В моем производном классе я называю ее как таковой.

private Button btnAddAlarm 
... 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timer_list); 

    loadView(btnDeleteAlarm, R.id.btnDeleteAlarm); //the view in the helper method loaded fine 
    btnDeleteAlarm.setEnabled(false); //Null pointer exception! 

проблема заключается в том, что btnDeleteAlarm является недействительным после того, как он выходит из функции, даже если ссылка передается в.

Я не касался Java в то время, но если я помню основы этого не должен Происходит при передаче ссылок.

ответ

2

Вы никогда не назначали что-то btnDeleteAlarm. В java методы всегда копируют свои аргументы, поэтому loadView получает копию ссылки btnDeleteAlarm и, возможно, изменяет копию, но она не изменит btnDeleteAlarm. Вы можете позволить вашему методу loadView вернуть «представление» и назначить его в методе onCreate для btnDeleteAlarm.

+0

Я вижу сейчас, я неправильно понял изображение, которое у меня было в моей голове для копирования ссылок на аргументы. – indigo0086

Смежные вопросы