不能使用<在我的代码中正确

时间:2016-06-21 20:54:18

标签: android xml android-studio

我从android书中获取此代码,但是我有以下错误:验证android xml文件中的资源引用。 我还注意到“String”之后的标签永远不会打开,所以本书要创建标签“<”用逃脱符号。

  <data class="ArrayTest">
    <import type="android.util.SparseArray"/>
    <import type="java.util.Map"/>
    <import type="java.util.List"/>
    <variable name="list" type="List&lt;String>"/>
    <variable name="sparse" type="SparseArray&lt;String>"/>
    <variable name="map" type="Map&lt;String, String>"/>
    <variable name="index" type="int"/>
    <variable name="key" type="String"/>
</data>

完整代码:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data class="ArrayTest">
    <import type="android.util.SparseArray"/>
    <import type="java.util.Map"/>
    <import type="java.util.List"/>
    <variable name="list" type="List&lt;String>"/>
    <variable name="sparse" type="SparseArray&lt;String>"/>
    <variable name="map" type="Map&lt;String, String>"/>
    <variable name="index" type="int"/>
    <variable name="key" type="String"/>
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{list[index]}"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{sparse[index]}"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{map[key]}"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:text='@{@string/param_example("Pippo", 50)}'
        />

</LinearLayout>
</layout>

Java代码:

ArrayTest mapTestBinding = DataBindingUtil
        .setContentView(this, R.layout.array_test);
List<String> list = new LinkedList<>();
SparseArray<String> sparse = new SparseArray<>();
Map<String, String> map = new HashMap<>();
mapTestBinding.setList(list);
mapTestBinding.setSparse(sparse);
mapTestBinding.setMap(map);
mapTestBinding.setKey("key");
mapTestBinding.setIndex(10);
String value = getResources().getString(R.string.param_example, "Pippo", 20);

错误:

http://pastebin.com/3CZmTLzM

5 个答案:

答案 0 :(得分:1)

您不会在代码中显示它,但要确保架构位于xml文件的顶部。

您的xml应如下所示:

<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data class="ArrayTest">
    <import type="android.util.SparseArray"/>
    <import type="java.util.Map"/>
    <import type="java.util.List"/>
    <variable name="list" type="List&lt;String>"/>
    <variable name="sparse" type="SparseArray&lt;String>"/>
    <variable name="map" type="Map&lt;String, String>"/>
    <variable name="index" type="int"/>
    <variable name="key" type="String"/>
</data>

...

答案 1 :(得分:1)

好的,我解决了使用&#34;检查android资源验证选项&#34;然后&#34;运行检查&#34;如下图所示:

Inspection image

这允许我以这种方式修改代码:

<?xml version="1.0" encoding="utf-8"?>
<!--suppress AndroidDomInspection -->
<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data class="ArrayTest">
    <import type="android.util.SparseArray"/>
    <import type="java.util.Map"/>
    <import type="java.util.List"/>
    <variable name="list" type="List&lt;String>"/>
    <variable name="sparse" type="SparseArray&lt;String>"/>
    <variable name="map" type="Map&lt;String, String>"/>
    <variable name="index" type="int"/>
    <variable name="key" type="String"/>
</data>

无论如何,谢谢你的帮助;)

答案 2 :(得分:0)

尝试使用utf-8编码xml文件。

答案 3 :(得分:0)

&lt;HTML符号的lower than特殊实体:< 也许在这本书的印刷中出现了一些错误。

试试这个:

<data class="ArrayTest">
    <import type="android.util.SparseArray"/>
    <import type="java.util.Map"/>
    <import type="java.util.List"/>
    <variable name="list" type="List<String>"/>
    <variable name="sparse" type="SparseArray<String>"/>
    <variable name="map" type="Map<String, String>"/>
    <variable name="index" type="int"/>
    <variable name="key" type="String"/>
</data>

这应该有效,因为diamond运算符现已完成。

修改

如果您想在xml文件中使用<>,请&lt;使用<&gt;使用>(和{如果您需要&amp;,请{1}}

答案 4 :(得分:0)

<data>
<import type="android.util.SparseArray"/>
<import type="java.util.Map"/>
<import type="java.util.List"/>
<variable name="list" type="List&lt;String&gt;"/>
<variable name="sparse" type="SparseArray&lt;String&gt;"/>
<variable name="map" type="Map&lt;String, String&gt;"/>
<variable name="index" type="int"/>
<variable name="key" type="String"/>

我也遇到了与你相同的问题。您可以在xxx.xml文件中声明这样的内容。虽然xxx.xml文件可能会出现错误,但您的apk可以成功构建并运行。对不起,我不擅长英语。