我一直得到一个Unable to instantiate activity ComponentInfo... Caused by a NullPointerException at findViewById
,我无法找出它为什么扔它。我已经在我的main.xml
中正确设置了我的元素ID,并且我已经尝试在每条线周围注释掉它以查看哪条线有问题但要让它运行w / o任何力量关闭我必须注释掉程序的所有功能。这是我的活动:
package fsg.dev.test.checkboxtest;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
public class checkBoxTest extends Activity {
private CheckBox checkbox = (CheckBox) findViewById(R.id.checkbox);
//private SeekBar seekbar = (SeekBar) findViewById(R.id.seekbar);
private View view = (View) findViewById(R.id.background);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
changeColor();
}
});
}
private void changeColor(){
if(checkbox.isChecked()){
view.setBackgroundColor(R.color.Blue);
//view.setAlpha(.25);
}
else if(!checkbox.isChecked()){
view.setBackgroundColor(R.color.White);
}
}
}
这是我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fsg.dev.test.checkboxtest"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name=".checkBoxTest"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
最后是我的main.xml:
<?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">
<CheckBox
android:text="Background Color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:id="@+id/checkbox">
</CheckBox>
<SeekBar
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/seekbar"
android:layout_margin="10dip" >
</SeekBar>
<View
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/White"
android:id="@+id/background">
</View>
</LinearLayout>
如果有人能帮助我缩小范围,那将是非常好的。
答案 0 :(得分:9)
您只需在findViewById
之后使用setContentView
:
....
public class checkBoxTest extends Activity {
private CheckBox checkbox;
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
checkbox = (CheckBox) findViewById(R.id.checkbox);
view = (View) findViewById(R.id.background);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
changeColor();
}
});
}
...
答案 1 :(得分:2)
在调用setContentView(R.layout.main)之后,需要在onCreate()方法中调用findViewById,因为在将XML扩展到各自的Java对象之前,UI对象将不存在。
答案 2 :(得分:1)
将您对findViewById的调用移至OnCreate方法。
答案 3 :(得分:1)
此实例化
private CheckBox checkbox = (CheckBox) findViewById(R.id.checkbox);
//private SeekBar seekbar = (SeekBar) findViewById(R.id.seekbar);
private View view = (View) findViewById(R.id.background);
应该采用onCreate的方法。
答案 4 :(得分:0)
首先要做的是设置活动的内容,然后,您可以从该内容中获取所有视图,因此请用以下代码替换您的代码:
public class checkBoxTest extends Activity {
private CheckBox checkbox ;
private View view ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//first , set the content of your activity
setContentView(R.layout.main);
//Second, get yours Views
checkbox = (CheckBox) findViewById(R.id.checkbox);
view = (View) findViewById(R.id.background);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
changeColor();
}
});
}
....