#java #android
#java #Android
Вопрос:
У меня проблема с findViewById с использованием Java в Android Studio. Я пытаюсь получить макет ограничения для использования .addview в нем, но он возвращает null.
Это макет:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@ id/gameLayout"
tools:context=".GameActivity">
Это строка с проблемами:
ConstraintLayout mainLayout = (ConstraintLayout) findViewById(R.id.gameLayout);
И он возвращает null, что я делаю плохо?
Спасибо
Редактировать: теперь я застрял после этого цикла, что может быть?
protected void generateGameZone(int m, int n){
LinearLayout[] main_layouts = new LinearLayout[m];
for(int i=0;i<main_layouts.length;i ){
main_layouts[i] = new LinearLayout(this);
main_layouts[i].setOrientation(LinearLayout.HORIZONTAL);
main_layouts[i].setLayoutParams(new LinearLayout.LayoutParams(30,30));
mainLayout.addView(main_layouts[i]);
}
LinearLayout[][] secondary_layouts = new LinearLayout[m][n];
for(int i=0;i<secondary_layouts.length;i ){
for(int j=0;j<secondary_layouts[i].length;j ){
secondary_layouts[i][j] = new LinearLayout(this);
secondary_layouts[i][j].setOrientation(LinearLayout.HORIZONTAL);
secondary_layouts[i][j].setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
TextView txtBox = new TextView(this);
txtBox.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
txtBox.setId(i*10 j);
secondary_layouts[i][j].addView(txtBox);
main_layouts[i].addView(secondary_layouts[i][j]);
}
}
}
Я получаю черный экран
Edit2: черный экран решен, теперь макет, который я создаю с циклами, не отображается
Комментарии:
1. Вы уже звонили
setContentView()
? Вы уверены, что это представление присутствует в переданном XML-файлеsetContentView()
?
Ответ №1:
Из вашего вопроса кажется, что вы пытаетесь ConstraintLayout
программно добавить к своей деятельности. Однако findViewById(int)
вызываемый из an Activity
пытается найти уже существующее представление в иерархии и возвращает null
, если оно не найдено.
Я думаю, что то, что вы ищете, это либо раздуть макет с помощью a LayoutInflater
, а затем добавить его, используя addView
, как вы предложили, или, если этот макет представляет корень вашей активности, используйте setContentView(int)
, чтобы позволить activity обрабатывать инфляцию.
Комментарии:
1.
seems like you are trying to add the ConstraintLayout programmatically
что заставляет вас так говорить?2. Извините, я только что перечитал ваш вопрос, и я думаю, что я неправильно понял. Можете ли вы предоставить код для
onCreate
вашей деятельности, где, я полагаю, вы используетеfindViewById(int)
?3. Вы хорошо понимаете мой вопрос, я думаю, что это решение, потому что я выполняю findViewById перед setContentView, позвольте мне попробовать это. Спасибо!
4. На этом все, оно будет работать только после
setContentView(int)
5. Да, это было спасибо! Я отредактировал главный вопрос, пожалуйста, если вы его видите! Спасибо