Android findViewById создает исключение NullPointerException - PullRequest
1 голос
/ 21 декабря 2011

У меня ViewFlipper определен в отдельном классе.Это выглядит так:

public class Flipper extends Activity {
    public ViewFlipper view_flipper;

    /* Constructor */
    public Flipper(int flipper_id) {
        view_flipper = (ViewFlipper) findViewById(flipper_id);
    }
    ...

Затем в методе onCreate() другого занятия я создаю экземпляр Flipper следующим образом:

private Flipper flipper;
flipper = new Flipper(R.id.login_screen_flipper);

Однако в конструкторе я получаю NullPointerExceptionфлиппера.Когда я отлаживаю, я вижу, что flipper_id имеет действительный идентификатор.Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Вы не можете создавать подобные действия.

Чтобы создать занятие, вы должны сделать это, используя Intents .И вы должны определить макет в файле XML и прикрепить его с помощью setContentView (R.layout.layout_name);

Посмотрите на это, чтобы начать обучение: https://developer.android.com/training/index.html


ОБНОВЛЕНИЕ:

ОК, неясно, что вы делаете с информацией вашего вопроса.

Если вы расширяете поведение ViewFlipper, я предлагаю вам расширить его:

package your.package;

public class MyFlipper extends ViewFlipper {
    // ...
}

Затем используйте его в своем XML-файле следующим образом:

<your.package.ViewFlipper
    [...] parameters [...] />

И, наконец, когда вы реализуете его, вы можете сделать это следующим образом:

public class YourActivity extends Activity {

    public ViewFlipper viewFlipper;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        viewFlipper = (ViewFlipper) findViewById(R.id.login_screen_flipper);
    }

    // ... more activity stuff
}

PS: Это хорошоиспользуйте нотацию lowerCamelCase в переменных-членах Java (или полях в Java)

1 голос
/ 21 декабря 2011

Когда вы создаете экземпляр Flipper в другом действии, findViewById вызывается в конструкторе Flipper.Это метод из класса Flipper, так как он расширяет Activity и, конечно, его вызов недопустим в конструкторе, поскольку вы не устанавливаете представление содержимого, как это обычно делается в Activity.onCreate.Flipper не должен расширять Activity, и вы должны передавать ViewFlipper в конструкторе, а не в id.

...