1

我有一些LinearLayout我想动态添加到Activitymain的 custom 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>错误消息显示在日志窗口中。

4

1 回答 1

1

如果您需要调用findViewById()以访问在 layout.xml 文件中声明的视图实例,那么您需要在View#onfinishInflate(). 一旦视图完成膨胀,就会调用它。在该功能中您可以findViewById()成功使用。当findViewById()视图被膨胀时在构造函数中使用时,子视图还没有被实例化和添加。这就是它返回 null 的原因。

于 2013-07-29T21:30:58.170 回答