ArtMikS
@ArtMikS

NullPointerrException при вызове addView(). Как исправить?

XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GameActivity">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:id="@+id/container">


    </FrameLayout>
</RelativeLayout>


GameActivity:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);
        Field field = new Field(this);
    }


Field:
public class Field extends View {
    private Context context;
    public Field(Context context) {
        super(context);
        this.context = context;
        createButton();
    }

    public void createButton()
    {
        FrameLayout container = (FrameLayout) findViewById(R.id.container);
        Button b = new Button(context);
        b.setText("123");
        b.setHeight(25);
        container.addView(b); //NullPointerrException
    }
}


Что я делаю не так?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
kivsiak
@kivsiak
software engineer
Все не так делеате.
1 - findViewById ищет в пределах локального лейаута а не у предка. А у поля лейаут вообще отствует.

2. Код createButton это вообще ересь. Дочерний вью не должен себя добавлять в контейнер сам. Равно как и за размерами своими следить. За это отвечает тип лейаута.

developer.android.com/training/custom-views/index.html читать это до простветления.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы