使用findViewById时onCreate()中的NullPointerException - 之前使用过setContentView吗?

时间:2011-08-21 10:22:38

标签: android

你好我正在写一个小的Android应用程序(版本2.3.3)。现在我在这个非常基本的代码中得到了这个奇怪的NullPointer异常:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainmenu);

newDeck = (Button) findViewById(R.id.newDeckB);
loadDeck = (Button) findViewById(R.id.loadDeckB);
viewEdition = (Button) findViewById(R.id.viewEditionB);

newDeck.setOnClickListener(this);
loadDeck.setOnClickListener(this);
viewEdition.setOnClickListener(this);
}

我现在在主菜单中使用这个简单的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/newDeckB"
        android:text="New Deck"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
<Button android:id="@+id/loadDeckB"
        android:text="Load Deck"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
<Button android:id="@+id/viewEditionB"
        android:text="View Edition"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
<TextView android:id="@+id/currentDeckTextView"
        android:text="Default Deck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

现在我的问题是第25行的nullpointexception,这是我设置第一个clickListener的行

newDeck.setOnClickListener(this);

使用调试器我发现newDeck按钮为空。我在网上搜索了很多但是这种问题的唯一答案是检查setContentView是否在findViewById之前设置。这显然就是这种情况。

我会很高兴得到任何建议。

以前的Thx!

2 个答案:

答案 0 :(得分:10)

获取您的视图并在onPostCreate()方法中设置侦听器。

答案 1 :(得分:-2)

App期望有两个事件,onCreate()和onStart()

你把这个功能放在哪一个,很重要。

我不得不将“findViewByID”从onCreate()移动到onStart()

    @Override
protected void onStart() {
         // use findViewById() here instead of in onCreate()
    }