最近做android程序,eclipse新建的工程,添加button监听,总是报错。
代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.Main_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
buttontest = (Button)findViewById(R.id.buttontest);
//buttontest.setText("testtest");
buttontest.setOnClickListener(new Button.OnClickListener()
{
// 实现监听器接口的匿名内部类,其中监听器本身是View类的内部接口
// 实现接口必须实现的onClick方法
@Override
public void onClick(View v)
{
}
});
}
代码本身是没有问题的,源码是通过main layout 调用 fragment layout。但是添加button监听后,模拟器总是终止运行。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.Main_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
buttontest = (Button)findViewById(R.id.buttontest);
System.out.println("ddddddddddddddddddddddddddddddddd");
System.out.println(buttontest);
System.out.println("ddddddddddddddddddddddddddddddddd");
//buttontest.setText("testtest");
/*buttontest.setOnClickListener(new Button.OnClickListener()
{
// 实现监听器接口的匿名内部类,其中监听器本身是View类的内部接口
// 实现接口必须实现的onClick方法
@Override
public void onClick(View v)
{
}
});*/
}
测试后,发现buttontest为null,所以总是报错。为什么那?
思考后,发现 findViewById 与 setContentView 有关。所查询的控件id必须包含于setContentView中设置的layout中。解决的方法就是将id保持与layout中,或者调用setContentView是改为, view.setContentView view即为所设置的页面layout
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
/*if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}*/
buttontest = (Button)findViewById(R.id.buttontest);
System.out.println("ddddddddddddddddddddddddddddddddd");
System.out.println(buttontest);
System.out.println("ddddddddddddddddddddddddddddddddd");
//buttontest.setText("testtest");
buttontest.setOnClickListener(new Button.OnClickListener()
{
// 实现监听器接口的匿名内部类,其中监听器本身是View类的内部接口
// 实现接口必须实现的onClick方法
@Override
public void onClick(View v)
{
}
});
问题很简单,但是纠结了很长时间,一直以为是系统的问题。长见识了。。。。