繁体   English   中英

无法重新生成r.id

[英]r.id not regenerated

我试图创建一个简单的按钮示例,但是当我添加以下代码时:

mButton =(按钮)findViewById(R.id.button1);

它不会更新我的R.id文件。 我已经尝试了一切,包括确保启用了自动构建,清理项目以及更新SDK。 在1.6和2.2项目中都会发生这种情况。

完整的代码如下所示:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class NewTest extends Activity {

 Button myButton;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myButton = (Button) findViewById(R.id.button1);
    }
}

findViewById正在R.id文件中查找您所引用的位置。

您的代码不会导致文件更新,因为它仅在查找按钮。

在布局中创建按钮将导致R.id文件更新。

<Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button One"/>

当您在上下文中使用findViewById时,当前上下文的视图为main.xml,因此上面的按钮示例将需要位于main.xml文件中。 否则,如果在另一个.xml布局中有另一个具有相同名称的按钮,则将在R.id文件中进行输入,但是您的代码将为您提供空指针异常,因为该按钮在上下文中不存在试图从中引用它。

确保在“活动”中正确导入了应用的R类:

import your.app.package.R;

更新:仅当您的Activity类不在your.app.package包的根目录中时,才需要此隐式导入。

使用R.id.something之前保存项目

在尝试遵循NotePadV1教程时,在将布局编辑器设置为API 15的情况下使用API​​ 19时遇到了相同的问题。 我无法从notes_row.xml文件中编译R.id.text1。

最初,我只是将文本粘贴到xml文件中以生成布局。 在尝试删除R和Clean失败后,我尝试完全删除notes_row布局。 重新创建布局时,我使用图形界面添加了TextView对象的属性,仅是ID @ + id / text1,宽度和高度。 然后我进行了清理并编译。 有效。

由于您使用的是基于XML的布局,因此请确保main.xml文件中具有android:id属性,并以“ @ + id / button1”作为值。

当您仅引用现有ID时,它不会更新生成的R.java文件。

仅在添加资源时更新。 button01必须已经存在于您的.xml文件之一中,否则您的'findViewById(R.id.button1)'将无法编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM