新手第一天,创建一个简单的工程,点击按钮改变文本背景颜色,遇到了尼玛一大堆问题,总结一下。 


一、在添加按钮监听事件的时候,提示: 


1)、类型 View 中的方法 setOnClickListener(View.OnClickListener)对于参数(new OnClickListener(){})不适用 


2)、OnClickListener 无法解析为类型 


3)、类型为 new OnClickListener(){} 的方法 onClick(View)必须覆盖或实现超类型方法 


这是因为没有导入OnClickListener包,在代码开头部分添加import android.view.View.OnClickListener; 即可。 


二、xml文件中的警告信息:[I18N] Hardcoded string "Button", should use @string resource

这是警告表示当前Button的text是硬编码,就是文本写死了。可以在res/values/strings.xml中配置

首先将android:text=“Button”改成 android:text=“@string/Button”,然后在res/values/strings.xml中的<resources>中添加

<string name="Button">确认</string>


三、APP安装失败,提示:The application has stopped unexpectedly. please try again.

如图:


关于这个问题花了一天的时间,网上搜了很久,最后在一个帖子里面才找到了解决办法。

没有找到相应的控件,即通过findViewById()返回的值为null。可能是由于下面几个原因造成的:

1)、代码中的ID与xml文件中ID不同;将ID改为相同的ID

2)、findViewByid()方法放在了setContentView(R.layout.xx)之前;将位置调换一下。

3)、clean一下工程,让ID重新生成。

4)、控件位置放错了地方。在res/layout/文件夹下面一共有两个xml文件,在函数onCreate中默认调用的是activity_main.xml,即:setContentView(R.layout.activity_main); 而控件却是放在fragment_main.xml中。 这个解决办法有两种:

a、将控件移到activity_main.xml中。但是个人不太喜欢这种方式。

b、控件仍然放在fragment_main.xml中,但是将自己需要添加的代码放在PlaceholderFragment类的onCreateView函数中(PlaceholderFragment类是MainActivity类的一个静态内部类,相当于当前活动的一个容器),然后通过rootview来获取控件的ID,如:final Button btn1 = (Button)rootView.findViewById(R.id.button1); 这段代码要放在工程自动创建的代码View rootView = inflater.inflate(R.layout.fragment_main, container, false); 的后面。获取到控件ID后,就可以根据自己的需要添加自己的代码了。


问:

1、为什么我在oncreate()中将setContentView(R.layout.activity_main)直接改成 setContentView(R.layout.fragment_main)还是出错?

2、把oncreate()中的setContentView(R.layout.activity_main)改成如下代码还是报错?

LayoutInflater inflater = LayoutInflater.from(this);
View layout=(View)inflater.inflate(R.layout.fragment_main, null);
setContentView(layout);

3、把oncreate()中的setContentView(R.layout.activity_main)改成如下代码结果能获取到ID,但是程序运行时还是会出错?

LayoutInflater inflater = LayoutInflater.from(this);
View layout=(View)inflater.inflate(R.layout.fragment_main, null);
setContentView(R.layout.activity_main);
final Button btn1 = (Button)layout.findViewById(R.id.button1);
        final TextView TV1 = (TextView)layout.findViewById(R.id.textView1);