0

こんにちは、レイアウトに含めたヘッダー ビューを含むリスト ビューを作成しようとしています。問題は、ヘッダー内のテキストビューから null ポインター例外が発生することです。これは見つからないためだと思いますので、私の質問は、別のレイアウト内に含まれている要素にどのようにアクセスするのですか?

私の活動のための私のレイアウトはこちら

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

   <include layout="@layout/listview_header" 
      android:id="@+id/listheader" />

   <ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
   />

</TableLayout>

ここに私の含まれているリストview_headerがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="fill_parent"
    android:layout_height="60dp"
    android:padding="10dp"
    android:id="@+id/header"
    >


     <TextView android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:textSize="14dp"
        android:textColor="#ffffff"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp" 
        android:shadowColor="@color/Black"
        android:shadowDx="1"
        android:shadowDy="1"
        android:shadowRadius="0.01"/>

</LinearLayout>

そして、ここに私のJavaがあります

      setContentView(R.layout.lo_listview_with_header);
      gilSans = Typeface.createFromAsset(getAssets(), "fonts/gillsans.ttf");
      listView = (ListView) findViewById(android.R.id.list);
      header = getLayoutInflater().inflate(R.layout.listview_header, null);
      title = (TextView) header.findViewById(android.R.id.title);


      Bundle intent = getIntent().getExtras();
      int position = intent.getInt("position") + 1;
      String backgroundColor = intent.getString("bg_color");
      String titleText = intent.getString("title");


      TextView tvTitle = (TextView)  header.findViewById(R.id.title);
      header.setBackgroundColor(Color.parseColor(backgroundColor));
      title.setText(titleText);

  }
4

1 に答える 1

1

2 つの問題があります。

最初に、実際にやりたいことが、アクティビティのレイアウトに既に含まれている listview_header を取得するときに、新しい listview_header を膨らませています。

あなたがしていること:

header = getLayoutInflater().inflate(R.layout.listview_header, null);

やりたいこと:

header = findViewById(R.id.listheader);

第二に、タイトルを見つけるために間違った ID を使用しています。Android.R.id.title ではなく、R.id.title が必要です。XML で @+id/ を使用すると、Java は R.id を使用します。XML で @android:id/ を使用すると、Java は android.R.id を使用します。そう:

  • @+id/id_name => findViewById(R.id.id_name);
  • @android:id/id_name => findViewById(android.R.id.id_name);

だからあなたが現在していること:

title = (TextView) header.findViewById(android.R.id.title);

そして、あなたがしたいこと:

title = (TextView) header.findViewById(R.id.title);

お役に立てれば。

于 2013-12-03T07:32:25.270 に答える