(新手小问题)OnClickListener报空指针异常

陈橘子 2015-02-05 07:50:15
MainActivity.java 部分代码如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
bt=(Button)findViewById(R.id.button);
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("dear");
}
});
}


程序生成activity_main.xml,fragment_main.xml两个文件夹
我在fragment_main.xml里面写了个button。
<Button 
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button"
/>


运行起来的话,就除了如下异常:
02-05 19:35:06.791: E/AndroidRuntime(6766): Caused by: java.lang.NullPointerException

如果我把:代码修改成这样子,程序就可以正常运行起来。


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}

}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
bt=(Button)findViewById(R.id.button);
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("dear");
}
});
}


那么现在问题来了,第一段代码中bt值为null,第二段代码却能找到bt.这里想不明白。如果在第一段代码里面修改,要怎么修改才能正常?
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
山鹰1985 2015-02-06
  • 打赏
  • 举报
回复
protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	         
	        if (savedInstanceState == null) {
	            getFragmentManager().beginTransaction()
	                    .add(R.id.container, new PlaceholderFragment())
	                    .commit();
	        }
                //用rootView来装载你的fragment布局,然后在该布局上才能找到你的Button
	        View rootView =LayoutInflater.from(this).inflate(R.layout.fragment_main, null); 
	        bt=(Button)rootView.findViewById(R.id.button);
	        bt.setOnClickListener(new OnClickListener() {
	             
	            @Override
	            public void onClick(View arg0) {
	                // TODO Auto-generated method stub
	                System.out.println("dear");
	            }
	        });
	    }
哎,真难 2015-02-06
  • 打赏
  • 举报
回复
因为fragment里面是不能在oncreate里面绑定id,应该在oncreateView里面绑定ID
MR__P 2015-02-06
  • 打赏
  • 举报
回复
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View rootView = inflater.inflate(R.layout.activity_main, container, false); bt=(Button)rootView.findViewById(R.id.button); bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub System.out.println("dear"); } }); return rootView; }
网络咖啡 2015-02-05
  • 打赏
  • 举报
回复
可能是R.java生成的问题,你清理一下项目试试:Project-Clean菜单
陈橘子 2015-02-05
  • 打赏
  • 举报
回复
来人啦~!来人啦~!

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧