Appcelerator:元素未添加到android中的视图中

Posted

技术标签:

【中文标题】Appcelerator:元素未添加到android中的视图中【英文标题】:Appcelerator: Elements are not added to views in android 【发布时间】:2018-01-10 02:23:44 【问题描述】:

我一直在开发一个多平台移动应用程序。我几乎完成了它,但我总是在 iOS 上进行测试(由于某些原因)。现在我可以在 Android 上进行测试,发现它在很多方面都失败了。

这里的主要问题是当我使用时:

alloy.createSomeElement(
    //params
)
$.someView.add(someElemet);

元素未添加到视图中。正如我所提到的,这只发生在 android 上并且在 ios 上运行良好。

这里我向您展示一个示例,它是两个平台的结果。

e.json.forEach(function(address) 
    var addressView = Ti.UI.createView(
        height : Ti.UI.SIZE,
            width : '90%',
            layout : 'horizontal',
            touchEnabled : true,
            Address_id : address.id
        );
        var icoCont = Ti.UI.createView(
            height : 20,
            width : '10%'
        );
        var icon = Ti.UI.createImageView(
            height : '20',
            width : '20',
            image : "/compartidos/persona3.png",
            touchEnabled : false
        );
        var addressText = Ti.UI.createLabel(
            height : Ti.UI.SIZE,
            width : Ti.UI.FILL,
            left : 1,
            text : address.street + " - " + address.ext_number,
            font : 
                fontSize : 12,
                fontFamily : "Nunito-Bold",
            ,
            touchEnabled : false,
            color: "#000"
        );
        if (address.alias)
            addressText.text = address.alias;
        var separator = Ti.UI.createView(
            height : 5,
            width : '100%',
            top : 5,
            bottom : 5,
            backgroundColor : '#8C000000',
            touchEnabled : false
        );
        addressView.add(icoCont, addressText);
        icoCont.add(icon);
        $.container.add(addressView, separator);
    );

iOS 上的结果:result on iOS

这在 Android 上:result on Android

我真的希望你能帮我解决这个问题。

注意:Nueva dirección 和 Dirección actual 不是这样生成的,它们存在于 xml 文件中。

【问题讨论】:

【参考方案1】:

经过长时间的尝试和错误后,我解决了我的问题。我只在有人遇到同样问题的情况下发布我的解决方案。

似乎在 Android 中我不能像这样在一条指令中添加多个元素

addressView.add(icoCont, addressText);

我唯一要做的就是像这样将它分成 2 个(每个元素一个)

addressView.add(icoCont);
addressView.add(addressText);

【讨论】:

使用 Alloy 数据绑定可以显着减少编写的代码量。通过使用一个简单的模拟库和主干模型和集合,您可以用控制器中的一行 JS 替换您的代码,并简化 XML 和 TSS。结果将是更少的代码,并且您将利用 Alloy 数据绑定必须提供的所有功能。有一个example here of a simple Todo app 使用小型模拟库将数组转换为集合。 谢谢你,我稍后会改进这个应用程序,现在截止日期很近,我必须尽快完成。【参考方案2】:

您可以在单个 add 语句中添加多个视图,但您需要将它们作为数组传递,例如:addressView.add( [icoCont, addressText] );

【讨论】:

我刚刚测试过它会导致应用程序崩溃。这是行不通的。还是谢谢你。 我从 Docs 中读过它,但有时文档可能没有更新。所以最好一个一个添加。

以上是关于Appcelerator:元素未添加到android中的视图中的主要内容,如果未能解决你的问题,请参考以下文章

Appcelerator Alloy Android - 无法将窗口/tabGroup 添加到另一个窗口/tabGroup

iOS LocationManager 未更新位置(Titanium Appcelerator 模块)

Appcelerator Titanium 3.x/IOS7 无法将窗口添加为视图的子项

您如何将 Parse Javascript API 与 Appcelerator 集成,而不使用未记录的调用?

Appcelerator - 在 dataCollection 生成的列表中隐藏 UI 元素

Titanium appcelerator 未列出 iPhone 以在开发模式下加载应用程序