我从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<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>
完整代码:
<?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<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>
<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);
错误:
答案 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<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>
...
答案 1 :(得分:1)
好的,我解决了使用&#34;检查android资源验证选项&#34;然后&#34;运行检查&#34;如下图所示:
这允许我以这种方式修改代码:
<?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<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>
无论如何,谢谢你的帮助;)
答案 2 :(得分:0)
尝试使用utf-8编码xml文件。
答案 3 :(得分:0)
<
是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文件中使用<
和>
,请<
使用<
,>
使用>
(和{如果您需要&
,请{1}}
答案 4 :(得分:0)
<data>
<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"/>
我也遇到了与你相同的问题。您可以在xxx.xml文件中声明这样的内容。虽然xxx.xml文件可能会出现错误,但您的apk可以成功构建并运行。对不起,我不擅长英语。