У меня есть несколько пользовательских LinearLayout
, которые я хочу добавить динамически на главный RelativeLayout
. Это одна из моих пользовательских макетов:Добавить настраиваемый макет в макет операции динамически
public class MyLayout1 extends LinearLayout {...}
Это my_layout_1.xml
файл для него:
<?xml version="1.0" encoding="utf-8"?>
<***myPackageName***.MyLayout1
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
......
</***myPackageName***.MyLayout1>
добавить пользовательский макет в RelativeLayout
используя этот код:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
View view = getLayoutInflater().inflate(R.layout.my_layout_1, mainLayout, false); //mainLayout is the id of the main RelativeLayout
mainLayout.addView(view, params);
Код работает нормально.
Но когда я использую функцию findViewById(...)
в своем классе MyLayout1
, он возвращает null
для всех видов. Как я могу связать файл .xml
и класс Java? Я думал, что добавить имя пакета + класса в .xml
было достаточно, но я был неправ. Также я пытался позвонить
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.my_layout_1, null);
в MyLayout1
классе, но сообщение об ошибке android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
отображается в окне лога.
Вы хотите найти findViewById() (0) –
Как вы относитесь к коду в своем классе? Это в конструкторе? В методе, вызванном откуда-то еще? –
О, да. Сожалею. Я изменю его сейчас. – smb