0

您好我正在尝试创建一个包含在布局中的标题视图的列表视图。问题是我从标题中的文本视图中得到空指针异常。我认为这是因为它找不到它所以我的问题是如何访问另一个布局中包含的元素?

这是我的活动布局

<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

我看到两个问题。

首先,您正在膨胀一个新的 listview_header,当您真正想要做的是获取已经包含在您的活动布局中的 listview_header 时。

你在做什么:

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

你想做什么:

header = findViewById(R.id.listheader);

其次,您使用了错误的 ID 来查找您的头衔;你想要 R.id.title,而不是 Android.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 回答