2011-05-09 99 views
5

我有代码:findViewById返回null

public class HelloWorld extends Activity { 

private Button buttonOk; 
private Button buttonCancel; 

private OnClickListener buttonOkListener = new OnClickListener() { 
    public void onClick(View v){ 
     EditText editText = (EditText)findViewById(R.id.input); 

     CharSequence textFromInput = (CharSequence) editText.getText(); 
     Context context = getApplicationContext(); 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context,textFromInput,duration); 
     toast.show(); 
    } 
}; 

private OnClickListener buttonCancelListener = new OnClickListener() { 
    public void onClick(View v){ 
     EditText editText = (EditText)findViewById(R.id.input); 

     CharSequence textFromInput = (CharSequence) editText.getText(); 
     Context context = getApplicationContext(); 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context,textFromInput,duration); 
     toast.show(); 
    } 
}; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    // ToDo add your GUI initialization code here 

    setContentView(R.layout.main); 

    buttonOk = (Button)findViewById(R.id.buttonOk); 
    buttonCancel = (Button)findViewById(R.id.buttonCancel); 

    buttonOk.setOnClickListener(buttonOkListener); 
    buttonCancel.setOnClickListener(buttonCancelListener); 
} 
} 

和布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/label" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Wpisz swoje imię:"/> 
<EditText 
    android:id="@+id/input" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/editbox_background" 
    android:layout_below="@id/label"/> 
<Button 
    android:id="@+id/buttonOk" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/input" 
    android:layout_alignParentRight="true" 
    android:layout_marginLeft="10dip" 
    android:text="OK" /> 
<Button 
    android:id="@+id/buttonCancel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/buttonOk" 
    android:layout_alignTop="@id/buttonOk" 
    android:text="Anuluj" /> 
</RelativeLayout> 

线与buttonCancel.setOnClickListener(buttonCancelListener);抛出异常,因为buttonCancel为null。我做错了什么?

+0

我面临同样的问题。即使代码中的所有内容看起来都正确,但FindViewById将返回null与其中一个按钮。 – castle1971 2011-10-26 07:48:05

回答

10

你的代码没有问题,通过正确的一切都应该正常工作。

通过findViewById方法遇到null最常见的错误是当您忘记调用setContentView或将其调用为错误的布局时。

我建议清理你的项目,然后再试一次!

1

我不是100%确定,但你正在调用findviewbyid的类初始化。我认为这个代码在onCreate方法之前被调用,所以无法找到视图。初始化oncreate方法中的监听器应该可以工作。

2

我遇到了同样的麻烦,但在清理我的项目并再次运行后,它完美地工作。