R.layout的原始类型int没有字段

时间:2011-12-27 16:15:31

标签: android android-layout

我正在尝试设置一个活动,当我尝试将我的一些视图分配给.java文件中的名称时,它告诉R.layout.bathing没有字段datePicker1,它确实拥有它。这是我的两个代码片段。我应该改变什么才能让它发挥作用?

bathing.java

setContentView(R.layout.bathing);
setTitle("Please Select Bathing Options");
bathdate = (DatePicker)findViewById(R.layout.bathing.datePicker1);
bathtime = (TimePicker)findViewById(R.layout.bathing.timePicker1);
add = (Button)findViewById(R.layout.bathing.button1);

bathing.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:gravity="center"
        android:text="@string/bath_tracking"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <DatePicker
        android:id="@+id/datePicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="16dp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/datePicker1"
        android:layout_marginTop="51dp"
        android:text="@string/date"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TimePicker
        android:id="@+id/timePicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/datePicker1"
        android:layout_below="@+id/datePicker1" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/timePicker1"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="50dp"
        android:text="@string/time"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/timePicker1"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Yes" />

    <RadioButton
        android:id="@+id/radioButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/radioGroup1"
        android:layout_below="@+id/radioGroup1"
        android:text="@string/No" />

    </RadioGroup>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/radioGroup1"
            android:layout_alignParentLeft="true"
            android:layout_marginBottom="36dp"
            android:text="@string/hair"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/timePicker1"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/radioGroup1"
            android:inputType="textMultiLine" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/editText1"
            android:layout_centerHorizontal="true"
            android:text="@string/Add"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/editText1"
            android:layout_alignBottom="@+id/editText1"
            android:layout_alignParentLeft="true"
            android:text="@string/comment"
            android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:4)

您必须通过ID来访问视图对象,而不是

bathdate = (DatePicker)findViewById(R.layout.bathing.datePicker1);

使用

bathdate = (DatePicker)findViewById(R.id.datePicker1);

等等。 ID是全局的,它们不是特定于某个布局。

这并不一定意味着每个视图都必须具有唯一的名称。最重要的是要知道findViewById() 在当前活动的视图层次中搜索(您可以通过在setContentView()之前调用它来尝试此操作 - 它将会总是返回null)。最后,这意味着ID在单个布局文件中应该是唯一的。

在多个布局中使用相同的ID没有问题。通常它甚至有用。考虑在res/layout/main.xml中使用正常布局的活动,在res/layout-land/main.xml中使用不同的横向格式布局。 Android将为您管理这些布局。如果您为相同目的的视图提供不同的唯一ID,则必须在代码(伪代码示例)中执行此操作:

if(layout == portrait)
    view = findViewById(R.id.viewid_portrait);
else if(layout == landscape)
    view = findViewById(R.id.viewid_landscape);

如果两者具有相同的ID,则不会发生冲突,但可以通过findViewById()的单行调用访问这两者。