从嵌套布局中检索Id

时间:2015-02-11 21:56:51

标签: android fragment scrollview relativelayout findviewbyid

我的问题是,我在主要RelativeLayout中的ScrollView内的LinearLayout中有多个RelativeLayouts。当试图获取片段类中的id时,我会让它一直给我错误。

我现在已经四处寻找答案了约两天,并且只是想到了使用

<include name="some_name" layout="@layout/some_layout"/>

它并没有真正帮助我使用我的应用程序。我正在尝试开发一个日历周视图,我已经有数字工作,左边是时间。

这是我的xml文件:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/day_labels_linear_layout"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal">
        <!-- not important but this holds the numbers up top -->
    </LinearLayout>
    <ScrollView
        android:id="@+id/calendar_scroll_view"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/day_labels_linear_layout"
        android:fadingEdge="none"
        android:overScrollMode="never"
        android:scrollbars = "none">

        <!-- used to space each day with the day_labels_linear_layout weights -->
        <LinearLayout
            android:id="@+id/calendar_spacer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <!--This has all of the hours, I just didn't include them
                because it would take up so much room-->
            <RelativeLayout
                android:id="@+id/hours_relative_layout"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="2.5"
                android:background="@color/scheduler_background" >

                <TextView
                    android:id="@+id/time_12_am"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:paddingBottom="25dp"
                    android:paddingTop="25dp"
                    android:text="@string/text_time_12_am" />

                <TextView
                    android:id="@+id/time_1_am"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/time_12_am"
                    android:layout_centerHorizontal="true"
                    android:paddingBottom="25dp"
                    android:paddingTop="25dp"
                    android:text="@string/text_time_1_am" />

                <TextView
                    android:id="@+id/time_2_am"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/time_1_am"
                    android:layout_centerHorizontal="true"
                    android:paddingBottom="25dp"
                    android:paddingTop="25dp"
                    android:text="@string/text_time_2_am" />

            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/sunday_relative_layout"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="2" >

                <View
                    android:id="@+id/divider_sunday_left"
                    android:layout_width="1dp"
                    android:layout_height="match_parent"
                    android:layout_alignParentLeft="true"
                    android:background="@color/divider_scheduler" />

                <Button
                    android:id="@+id/sunday_day"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_centerInParent="true"
                    android:background="@color/transparent" />

                <View
                    android:id="@+id/divider_sunday_right"
                    android:layout_width="1dp"
                    android:layout_height="match_parent"
                    android:layout_alignParentRight="true"
                    android:background="@color/divider_scheduler" />
            </RelativeLayout>

            <!-- there is a Relative layout for each day-->

        </LinearLayout>          
    </ScrollView>
</RelativeLayout>

所以当我尝试访问id时,这就是我得到的:

RelativeLayout sundayRL;
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.fragment_scheduler, null);

    sundayRL = (RelativeLayout) view.findViewById(R.id.sunday_relative_layout);


}

它给了我错误:sunday_relative_layout无法解析或者不是字段,我添加了一个按钮,看看我是否可以获取该ID并且发生相同的结果。然而,我能够找到顶部LinearLayout中每天的数字和日期名称的id。

有没有人有更好的解决方案呢?我在用户点击视图时尝试注册,以便将其发送到计划页面。

编辑: 所以将null更改为容器允许我找到我的ID

View view = inflater.inflate(R.layout.fragment_scheduler, container);

但是它引起了另一个问题,即其他一个片段上有一个地图片段,说我没有合适的API密钥。

1 个答案:

答案 0 :(得分:0)

如果您有嵌套布局 例如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout >
    <RelativeLayout
      android:id="@+id/rl2>
         <Button
           android:id="@+id/getStarted"
            />
   </RelativeLayout>

</RelativeLayout>

并且您想按嵌套的按钮。 在嵌套布局上添加ID。

并在onCreate()

中使用此代码
View view = (View) findViewById(R.id.rl2);
Button button = (Button) view.findViewById(R.id.getStarted);