findViewById在<include> d视图内的LinearLayout上返回null

sad*_*daf 8 android include nullpointerexception android-linearlayout

我不知道这里的错误.我可能会看到一些事情......

布局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <include
        android:id="@+id/headerInclude"
        android:layout_width="fill_parent"
        android:layout_height="38dp"
        android:layout_gravity="top"
        layout="@layout/header" />

    <LinearLayout
        android:id="@+id/actualView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:layout_weight="1" >

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:divider="@drawable/dotted_line"
            android:dividerHeight="2dp"
            android:drawSelectorOnTop="false"
            android:paddingBottom="10dp"
            android:paddingTop="10dp" />
    </LinearLayout>

    <include
        android:layout_width="fill_parent"
        android:layout_height="35dp"
        android:layout_gravity="bottom"
        layout="@layout/footer" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

包含的标头XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/headerLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/header_bgr"
    android:orientation="horizontal"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="7dp" >

    <TextView
        android:id="@+id/tvScreenTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.8"
        android:ellipsize="end"
        android:gravity="center|left"
        android:singleLine="true"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#ffffff"
        android:textSize="17sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvScreenSubTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.2"
        android:gravity="center|right"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#ffffff"
        android:textSize="15sp"
        android:textStyle="bold" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

列表活动java代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    appData = ((DxApp) this.getApplicationContext()).getData();
    setContentView(R.layout.list);
    setTitle("Some Title...");
    // some more code...
    addButtons();
}

protected void addButtons() {
    LinearLayout headerLayout = (LinearLayout) findViewById(R.id.headerLayout);
    Button btn = new Button(this);
    btn.setText("Go to My Sets");
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // do some thing here...
        }
    });

    if (headerLayout != null)
        headerLayout.addView(btn);
}

@Override
public void setTitle(CharSequence title) {
    TextView tvTitle = (TextView) findViewById(R.id.tvScreenTitle);
    tvTitle.setText(title);
}
Run Code Online (Sandbox Code Playgroud)

如果我删除了检查if(headerLayout != null),我会得到null指针异常headerLayout.addView(btn).
我能够进入TextView功能,setTitle但有些怎么办不了LinearLayout

任何人都可以帮我弄清楚代码有什么问题......

Luk*_*rog 29

如果设置元素的id属性include,那么它将是膨胀布局的根的id.因此,而不是寻找LinearLayout具有id的id headerLayout寻找id headerInclude(或者不为include元素设置id ).