r.id没有再生

时间:2010-10-26 14:48:52

标签: android button

我正在尝试创建一个简单的按钮示例,但是当我添加此代码时:

mButton =(Button)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);
    }
}

6 个答案:

答案 0 :(得分:2)

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文件中生成,但是您的代码会给您一个空指针异常,因为您在上下文中不存在该按钮试图从中引用它。

答案 1 :(得分:2)

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

import your.app.package.R;

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

答案 2 :(得分:1)

在使用R.id.something

之前保存项目

答案 3 :(得分:0)

由于您使用的是基于XML的布局,请确保main.xml文件中包含 android:id 属性,并将“@ + id / button1”作为其值.......

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

最初,我刚刚将文本粘贴到xml文件中以生成布局。在尝试删除R和一个Clean失败后,我尝试完全删除notes_row布局。当我重新创建布局时,我使用图形界面添加TextView对象的属性,只是Id @ + id / text1,width和height。然后我做了一个Clean并编译。它奏效了。