10

ここで間違いを見つけることはできません。私は何かを探しているかもしれません...

レイアウト 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>

リスト アクティビティの 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

コードの何が問題なのかを理解するのを手伝ってくれる人はいますか...

4

2 に答える 2

30

id要素の属性を設定するincludeと、それがインフレートされたレイアウトのルートの ID になります。そのため、id を持つを探す代わりにLinearLayout、idheaderLayoutを探しますheaderInclude(または、要素に id を設定しないでくださいinclude)。

于 2013-03-16T20:16:49.863 に答える
0

これを試して:

View v = getlayoutInflater().inflate(((LinearLayout)findViewById(R.id.headerInclude)), null);
TextView tvTitle = (TextView)  v.findViewById(R.id.tvScreenTitle);
于 2013-03-16T22:30:02.693 に答える