android - findViewById在<include> d View 内的LinearLayout上返回null

标签 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>

包含的标题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>

列出 Activity 的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);
}

如果删除检查if(headerLayout != null),则会在null上收到headerLayout.addView(btn)指针异常。
我可以在函数TextView中获得setTitle,但是有些方法无法获得LinearLayout
谁能帮我弄清楚代码出了什么问题...

最佳答案

如果为id元素设置include属性,则该属性将为展开式布局的根的ID。因此,与其寻找ID为LinearLayoutheaderLayout,不如寻找ID headerInclude(或者不为include元素设置ID)。

关于android - findViewById在<include> d View 内的LinearLayout上返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59403836/

相关文章:

java - EditText 已声明,但 LogCat 仍给出 nullpointerException

java - 空指针异常?

android - 我可以以编程方式获取已安装的应用程序类别吗?

android - 房间持久化库和内容提供者

c++ - #include 并不真正包含 C++ 中的代码

跨多个包含 block 的 Java 变量 - 无法解析变量

java - 什么是NullPointerException,我该如何解决?

android - 在 MAC 操作系统上找不到 Android SDK 管理器设置

java - 为什么我无法设置 POST 变量的值?

wpf - 在 xaml 中包含 xaml 元素