FindViewById返回null?

时间:2013-07-15 08:57:51

标签: android

我正在尝试从数组中填充listView。但是,当我尝试在我的java代码中找到listview时,findViewById函数返回null。

这是我的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/androidbg_dark"
    tools:context=".DiaryActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/lstAppts"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:textColor="#FFFFFF" ></ListView>

        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layout_weight="1" 
            android:layout_height="64dp">

            <Button
                android:id="@+id/btnOther"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="2dip"
                android:layout_weight="1"
                android:background="@drawable/menu_button"
                android:onClick="newAppointment"
                android:textColor="#FFFFFF" />

            <Button
                android:id="@+id/btnOther2"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="2dip"
                android:layout_weight="1"
                android:background="@drawable/menu_button"
                android:onClick="newAppointment"
                android:textColor="#FFFFFF" />

            <Button
                android:id="@+id/btnNewAppt"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="2dip"
                android:layout_weight="1"
                android:background="@drawable/menu_button"
                android:onClick="newAppointment"
                android:text="@string/newappt"
                android:textColor="#FFFFFF" />
        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

这是违规代码:

ListView lstAppts = (ListView) findViewById(R.id.lstAppts);
String[] data = { "Appointment 1", "Appointment 2", "Appointment 3" };

ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
lstAppts.setAdapter(adapter);

据我所知,我正确引用了listview。它在我的XML中命名为'lstAppts',在findViewById函数中,我使用R.id.lstAppts找到它。但是,当我使用断点调试代码时,我可以清楚地看到lstAppts对象是null。这是为什么?

3 个答案:

答案 0 :(得分:1)

好像你试图在构造函数上调用findViewById()。在Android中,您应该使用onCreate()方法来初始化Activity而不是构造函数。

答案 1 :(得分:0)

很可能你没有在onCreate方法上夸大正确的布局。检查setContentView方法并确保它与“listView”的布局名称匹配。

答案 2 :(得分:0)

如果您在对话框,弹出窗口等中使用listview,那么您必须使用这样的findViewById。

ListView lstAppts = (ListView) context.findViewById(R.id.lstAppts);

或者如果您有:查看布局

ListView lstAppts = (ListView) layout.findViewById(R.id.lstAppts);

干杯,