您的位置:首页 > 移动开发 > Android开发

android 4.4 添加按钮监听异常问题解决办法

2014-06-01 19:57 525 查看
以前在android 2.3中开发过简单的app,好久没碰android了,最近下载了android 4.4的开发sdk,想编写个简单的例子,编写流程还是按照以前的样式写,结果,发现明明以前正确的代码,现在却不可用了。如在fragment_main.xml中添加如下内容:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.hi.MainActivity$PlaceholderFragment" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="@string/btn1"/>
</RelativeLayout>
在strings.xml中添加如下内容:

<string name="btn1">提交</string>


在MainActivity.java中的onCreate方法中添加如下内容:

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

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
Button btn = (Button)findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.v("Click","click button");
}
});
}


结果运行这个程序,就是报错。按照android2.3 的方式,这个应该是没有问题的。后来在网上搜索关于Fragment的相关内容,发现android最新版本中发生了变化,回顾之前的,我的Button按钮定义在了fragment_main.xml中。而我确在Activity_main的布局中通过findViewById去获取fragment_main.xml中定义的控件,这样就导致了获取的Button控件为空指针,那么后面的设置监听就肯定是异常了。所以,对于使用了fragment布局的工程,需要按照另一种方式去编写程序。
讲上面的onCreate中刚才添加的Button相关代码删除,放到public static class PlaceholderFragment extends Fragment内部类中。如下面所示:

public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
Button btn1 = (Button)rootView.findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.v("Tag","hello");
}
});
return rootView;
}
}
这样再次编译,就成功执行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐