Android:findViewById(R.id.listView)返回null

时间:2015-11-25 05:24:59

标签: java android android-listview

我有自定义布局:

taskview.xml

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

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

我的活动如下:

DaysList.java

public class DaysList extends Activity {

    String []data= {"Wake up", "Take a shit", "Bath", "Feed your belly"};
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);            
    }

    public void showTask(View view){

        listView= (ListView)findViewById(R.id.listView);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.task_row, R.id.textView, data);
        listView.setAdapter(adapter);
    }

}

showTask 是一个侦听器函数,它侦听onClick事件。我不知道为什么我得到 findViewById(R.id.listview)的NullPointerException。

顺便说一下,我是Android的新手,这就是为什么我不确定我是否遗漏了某些东西。

修改: 我有2个布局,activity_main.xml有一些按钮。每当有人点击那些按钮时,就会调用showTask方法。

DaysList是与activity_main.xml相关联的活动,因为它是我应用程序的第一页。这就是我无法使用taskview.xml更改它的原因。

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="#F44336"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".DaysList">


        <ImageView
            android:id="@+id/mon"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_marginRight="5sp"
            android:src="@drawable/mon"
            android:adjustViewBounds="true"
            />

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:background="#F44336"
            android:fontFamily="sans-serif"
            android:paddingBottom="15sp"
            android:paddingTop="15sp"
            android:paddingLeft="25sp"
            android:text="Monday"
            android:textColor="#E8F5E9"
            android:textSize="34sp"
            android:onClick="showTask"/>
    </LinearLayout>


Thanks!!

5 个答案:

答案 0 :(得分:2)

setContentView(R.layout.activity_main);  

setContentView(R.layout.taskview);   

因为您设置了错误的xml文件。并在onCreate方法

中使用此功能

答案 1 :(得分:2)

在onCreate方法中获取listView,并且还没有调用showTask

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    listView= (ListView)findViewById(R.id.listView); 
    showTask();          
}

并从showTask方法中删除它

答案 2 :(得分:0)

试试这个,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.taskview); 

    listView= (ListView)findViewById(R.id.listView);          
}

答案 3 :(得分:0)

您的Listview位于taskview.xml

因此请使用setContentView(R.layout.taskview);

答案 4 :(得分:0)

使用showTask方法中给出的view参数来查找您的id 像这样的东西

listView= (ListView)view.findViewById(R.id.listView);