findViewById找不到我的按钮

时间:2014-05-05 00:09:18

标签: android button findviewbyid

我是Android编程的新手,我正在尝试制作一个简单的按钮,点击时会显示一个Toast通知。

我尝试在我的MainActivity中初始化一个名为“button”的按钮,如下所示:

public class MainActivity extends Activity implements View.OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button =(Button)findViewById(R.id.button1);
    button.setOnClickListener(this);
}

    public void onClick(View v){
        Toast toast = Toast.makeText(this, "Click Me", Toast.LENGTH_LONG);
        toast.show();
    }
}

此外,还有activity_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">

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

</Button>

</RelativeLayout>

更新:findViewById现在可以在导入android.R后正常工作。但是,当我调用setContentView(R.layout.activity_main);

时,这会产生一个新错误

Here is the new error

4 个答案:

答案 0 :(得分:2)

这里有一点背景知识。 strings.xml用于定义文本片段。例如,可能出现在按钮上的文本(但这不会定义按钮本身)。

该按钮必须在res / layout /目录中的布局文件中定义。您的可能称为activity_main.xml。

您需要在此文件中创建一个按钮元素,并将ID分配给描述性内容。这种id是findViewById要搜索的内容。

一个例子:

    <Button
    android:id="@+id/thebuttonsid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="96dp"
    android:text="@string/button1" />

您可以像这样获得此按钮的句柄:

Button button = (Button)findViewById(R.id.thebuttonsid);

请注意我如何将文字设置为@string/button1?这就是strings.xml文件的用途。但是,布局目录中的布局文件是您定义按钮等控件的位置。

答案 1 :(得分:0)

按钮的ID名称与按钮的文本名称相同。你最好把任何一个改成其他名字。它一定是工作。

答案 2 :(得分:0)

我会清理项目并重新构建。或者重新进口项目。 Eclipse是......很难使用。尝试使用Android Studio。

答案 3 :(得分:0)

当资源清理时出现“不匹配”时,项目是一个很好的建议。在过去,情况更是如此。 接下来我会检查你的资源是否如此编译。您的资源中某处可能存在错误,因此R会对网络进行编译,并且对R.id. *的任何引用都无效。