数据绑定泛型变量

时间:2016-05-12 06:33:08

标签: android android-databinding

如何定义数据绑定变量的泛型类型?

以下代码永远不会编译。

<data>
    <variable
        name="viewModel"
        type="com.example.viewmodel.ViewModel<Model>"/>
</data>

4 个答案:

答案 0 :(得分:20)

你需要转义&lt; Model&gt;如下图所示:

<data>
    <variable
        name="viewModel"
        type="com.example.viewmodel.ViewModel&lt;Model>"/>
</data>

Android Studio仍会显示“无法解析符号”错误,但XML会进行编译。这是一个众所周知的问题。来自Android Studio Support for Data Binding

  

注意:当没有错误时,数组和泛型类型(如Observable类)可能会显示错误。

答案 1 :(得分:4)

试试这个:

<data>
<variable
    name="viewModel"
    type="com.example.viewmodel.ViewModel&lt;Model&gt;"/>
</data>

&lt;负责&lt; &gt;负责&gt;

答案 2 :(得分:1)

你有一个XML的左三角括号; XML不会那样玩。试试

var API_KEY = '737061636520696e74656e74696f6e616c6c7920626c616e6';

function queryString(map) {
    return '?' +
        Object.keys(map)
            .map(function (key) {
                return key + '=' + encodeURIComponent(map[key]);
            })
            .join('&');
}

function defineWord(word) {
    return new Promise(function (resolve, reject) {
        var request = new XMLHttpRequest();
        var uri =
            'http://api.wordnik.com/v4/word.json/' + encodeURIComponent(word) +
            '/definitions' + queryString({
                limit: 1,
                includeRelated: false,
                sourceDictionaries: 'all',
                useCanonical: false,
                includeTags: false,
                api_key: API_KEY,
            });

        request.addEventListener('error', reject);
        request.addEventListener('load', function () {
            resolve(this.response);
        });

        request.responseType = 'json';
        request.open('GET', uri, true);
        request.send(null);
    });
}

function define(words) {
    return Promise.all(words.map(defineWord))
        .then(function (results) {
            var definitions = {};

            results.forEach(function (result, i) {
                definitions[words[i]] = result;
            });

            return definitions;
        });
}

答案 3 :(得分:0)

您可以设置类似上面的示例:

<data>
    <import type="com.example.path.Model"/>
    <variable
        name="obj"
        type="com.example.viewmodel.ViewModel&lt;Model&gt;"
        />
</data>

注意:您可以在模型末尾写上> '或' &gt; '

为避免显示错误,请不要忘记添加行以表明使用的对象类型:

<import type="com.example.path.Model"/>