为什么编译器说我不是在给我的TableLayout一个id?

时间:2012-03-14 05:05:32

标签: android android-layout android-xml android-view android-tablelayout

我重新安排了动态创建窗口小部件/视图的代码,虽然xml布局似乎是“格式良好”(它编译),但当我到达相应的“setContentView()”时,它会崩溃。

IOW:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ondemandandautomatic_dynamicauthorize); <-- crashes when I F6 (Eclipse) on this line

...所以我在我的xml布局文件中注意到一个警告图标:“这个TableLayout没用(没有孩子,没有背景,没有id)”

好吧,我打算在运行时添加孩子;为什么需要背景?还有一个大问题:当我添加一个时,它为什么说它没有id:

<TableLayout>
android:id="@id/tlDynamicRows" <-- IT'S RIGHT THERE!!!
android:layout_width="match_parent"
android:layout_height="match_parent" > 
</TableLayout>

还有另一个警告说:“这个TableRow或它的TableRow父母是没用的”

这是整个xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TableLayout
        android:id="@+id/tlDynamic"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TableRow> <- This is where it says, "This TableRow or its TableRow parent is useless"

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/demand"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/time"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/space"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/contact"
                android:textAppearance="?android:attr/textAppearanceMedium" />
        </TableRow>
    </TableLayout>

    <ScrollView
        android:id="@+id/scrollViewHost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" >

        <TableLayout> <- This is where it says, "says, "This TableRow or its TableRow parent is useless"
        android:id="@id/tlDynamicRows"
        android:layout_width="match_parent"
        android:layout_height="match_parent" > 
        </TableLayout>
    </ScrollView>

</LinearLayout>

什么可能导致这种令人反感的发展?

更新:

查看帖子时,我看到xml中的最终“TableLayout”有一个多余的直角括号。所以,我拿出了第一个,现在我得到一个错误的消息,即“没有找到与给定名称匹配的资源(在'id'处,值为'@ id / tlDynamicRows')。”

xml的那部分现在是:

<TableLayout
    android:id="@id/tlDynamicRows"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</TableLayout>

是什么给出了?

更新

这是最终有效的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TableLayout
        android:id="@+id/tlDynamic"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/demand"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/time"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/space"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="2dip"
                android:text="@string/contact"
                android:textAppearance="?android:attr/textAppearanceMedium" />
        </TableRow>
    </TableLayout>

    <ScrollView
        android:id="@+id/scrollViewHost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" >

        <TableLayout
            android:id="@+id/tlDynamicRows"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </TableLayout>
    </ScrollView>

</LinearLayout>

我仍然有一条警告消息要在ScrollView中的TableLayout中更改此行:

android:layout_height="wrap_content"

为:

android:layout_height="wrap_content"

我做了,它似乎没有任何区别 - 但它摆脱了警告,所以我会离开它。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您在上面发布的XML中有几点需要注意:

1-当您使用第一个表行

  <TableRow> <- This is where it says, "This TableRow or its TableRow parent is useless"

在这一行中,您没有指定行的layout_height和layout_width属性,这就是您在警告中“无用”的原因。

2-另一点是尝试在按钮的滚动视图中为表格布局提供id为:

 android:id="@+id/tlDynamicRows"

而不是

 android:id="@id/tlDynamicRows"
希望这些对你有用。