Почему это не работает - Android - onCreate () - PullRequest
3 голосов
/ 28 июля 2010

Следующий код не работает, и выдает исключение RuntimeException, вызванное NullPointerException

public class ListFilteredActivity extends Activity {
    LinearLayout typeSelector = new LinearLayout(this) ;

    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         ScrollView sv = new ScrollView(this);
         this.setContentView(sv);
         //this.typeSelector = new LinearLayout(this);
         this.typeSelector.setOrientation(LinearLayout.VERTICAL);
         sv.addView(this.typeSelector);
     }

Когда я перемещал инициализацию this.typeSelection внутри onCreate (), он прекрасно работает.

    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       this.typeSelector = new LinearLayout(this);
       ...
    }

Почему ошибка нулевого указателя?Встроенное объявление в первом фрагменте кода происходит, как только вызывается конструктор, а затем onCreate () получает доступ к объекту, не так ли?

1 Ответ

3 голосов
/ 28 июля 2010

LinearLayout требует, чтобы вы передали Context. Это объект жизненного цикла Android, а не объект Java. При объявлении и инициализации поля напрямую оно будет инициализировано с помощью конструктора Java по умолчанию. Однако вы получите контекст только после того, как появится метод жизненного цикла onCreate, который намного, намного позже и станет частью Android, а не Java. Поэтому, когда вы вызываете конструктор LinearLayout с this, Android ожидает ссылку на Context, который вы получаете только после вызова onCreate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...