问题描述
|
我不断收到
Unable to instantiate activity ComponentInfo... Caused by a NullPointerException at findViewById
,我不知道为什么扔它。我在我的ѭ1correctly中正确设置了我的元素id,并且我尝试注释掉抛出错误的每一行,以查看哪一行是有问题的,但是要使其不带任何强制闭合运行,我必须全部注释掉程序的功能。这是我的活动:
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>
如果有人可以帮助我缩小范围,那将是很好的。
解决方法
您只需在
setContentView
之后使用findViewById
:
....
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();
}
});
}
...
,调用setContentView(R.layout.main)后,需要在onCreate()方法中调用findViewById,因为在XML扩展到其各自的Java对象之后,UI对象才存在。
,将对findViewById的调用移到OnCreate方法中。
,这个实例化
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的方法。
,首先要做的是设置活动的内容,然后,您可以从该内容中获取所有视图,因此将代码替换为:
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();
}
});
}
....