1

我有一个名为的布局view.xml,其中包含一个View名为view_related. 基本上,在我的字典应用程序中,如果有与条目相关的单词,我将替换view_relatedLinearLayout包含标题“相关条目”和TextView代表每个相关单词的一堆 s。

NullPointerException每次我在我的方法中添加一个TextView时,我都会得到一个,虽然我的代码看起来很简单,但我不明白为什么。LinearLayoutActivityonCreate()

视图.xml

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

    <TextView android:id="@+id/view_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12pt"
        android:textColor="#fff"
        android:textStyle="bold"
        android:background="#990011"
        android:padding="10dp"
        android:text="lalala word"
        />

    <ScrollView android:id="@+id/view_description"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/view_header">
        <LinearLayout android:id="@+id/view_description_content"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="20dp"
                android:text="@string/demo_definition"
                />
                <!-- THIS WILL BE REPLACED -->
            <View android:id="@+id/view_related"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"></View>
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

view_related.xml,LinearLayout将替换Viewview.xml 中的元素

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_related_entries"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView android:id="@+id/view_related_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:textColor="#fff"
        android:textStyle="bold"
        android:textSize="7pt"
        android:background="#000"
        android:text="Related entries"
        />
    <LinearLayout android:id="@+id/view_related_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </LinearLayout>
</LinearLayout>

最后,该onCreate方法现在假设相关条目是“Hello”和“Goodbye:”

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);

    LinearLayout ll = (LinearLayout) findViewById(R.id.view_related_list);
    TextView tv = new TextView(this);
    tv.setText("Hello");
    ll.addView(tv); // NULL POINTER EXCEPTION

    tv = new TextView(this);
    tv.setText("Goodbye");
    ll.addView(tv);

    LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    View view = findViewById(R.id.view_related);
    ViewGroup parent = (ViewGroup) view.getParent();
    int index = parent.indexOfChild(view);
    parent.removeView(view);
    View llview = li.inflate(R.id.view_related_entries, parent, false);
    parent.addView(llview, index);
}
4

5 回答 5

2
setContentView(R.layout.view);
LinearLayout ll = (LinearLayout) findViewById(R.id.view_related_list);

该函数findViewById仅查找实际设置的视图。您的 currentsetContentView没有设置包含您要在其中查找的 id 的 xml,因此我引用的第一行不会产生任何结果。

您应该加载正确的 XML,或者使用充气器充气您正在寻找的视图

于 2012-10-25T09:38:14.563 回答
1

行 ( LinearLayout ll = (LinearLayout) findViewById(R.id.view_related_list);) 将搜索view_related_listin view.xml,因为之前的行是您正在使用的视图..

您需要先充气view_related.xml,然后从中获取视图..

于 2012-10-25T09:38:12.433 回答
1

您在代码中做了很多错误的事情。首先,您搜索LinearLayout不在当前布局中且当时也不在任何膨胀布局中的 a。其次,您尝试夸大id参考而不是layout参考。最后,您应该使用另一种方法来完成您正在尝试做的事情。您的代码应该是(根据我的理解):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);   

    LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    View view = findViewById(R.id.view_related);
    ViewGroup parent = (ViewGroup) view.getParent();
    int index = parent.indexOfChild(view);
    parent.removeView(view);
    View llview = li.inflate(R.layout.view_related, parent, false); // is view_related the name of the extra layout file?
    parent.addView(llview, index);
    LinearLayout ll = (LinearLayout) findViewById(R.id.view_related_list); // or search for it in llview, llview.findViewById(R.id.view_related_list);
    TextView tv = new TextView(this);
    tv.setText("Hello");
    ll.addView(tv); // NULL POINTER EXCEPTION

    tv = new TextView(this);
    tv.setText("Goodbye");
    ll.addView(tv);
}

在这种情况下,您应该使用 aViewStub添加新的布局文件。虽然,我不明白view.xml如果你要在onCreate方法中添加布局的内容,为什么不直接添加新的布局文件。

于 2012-10-25T09:51:19.027 回答
0

我认为你需要使用setContentView(R.layout.view_related);而不是setContentView(R.layout.view);

或者您可以做的另一件简单的事情是在同一布局“视图”中采用线性布局,并在不需要时使其不可见并在需要时使其可见

于 2012-10-25T09:37:35.467 回答
-1

您可能忘记在 manifest.xml 中声明您的 Activity

于 2012-10-25T09:39:59.453 回答