ScrollableView

时间:2016-07-28 08:11:01

标签: view titanium appcelerator scrollable

我有一个合金的钛项目。 然后在屏幕上我有一个ScrollableView。当我打开这个屏幕时,我需要删除屏幕的所有视图,但我不能。

principal.xml

<ScrollableView id="EmisorView" onScrollend="CambioEmisor" top="10%"  height="10%" width="100%" backgroundColor="#fff">
</ScrollableView>    

principal.js

function ConstruyoEmisores(){

var db = Ti.Database.open('Termolink');
var rows = db.execute('SELECT * FROM Regulaciones ORDER BY Regulaciones.Nombre,Regulaciones.Serie');

NRegistros=ComprueboRegBD();

for (i=0;i<$.EmisorView.views.length;i++){
    $.EmisorView.removeView($.EmisorView.views[i]);
}

var i;

var serieenqueestoy=0;

for (i=0;i<NRegistros;i++){
    TablaNombreTermostatos[i]= rows.field(2);

    if (rows.field(0)==Serie) serieenqueestoy=i; //esto es para posicionar en el seleccionado

    var nuevaView=Ti.UI.createView();   

    var titulo1=Ti.UI.createLabel({
        id: "NombreTerm",
        text: TablaNombreTermostatos[i],
        color: "#b0acb1" ,
        textAlign: Ti.UI.TEXT_ALIGNMENT_LEFT, 
        left:"44%",
        top:"33%"
    });
    var imagen1=Ti.UI.createImageView({
        id: "Radiador",         
        image: "/figura radiador.png",
        height: "60%",
        left:"32%",
        top:"20%"
    });
    if (Ti.Platform.name=="iPhone OS") {
        imagen1.left = "13%";
    }

    nuevaView.add(imagen1);
    nuevaView.add(titulo1);                         

    $.EmisorView.addView(nuevaView);

    rows.next();
}       

db.close(); 

$.EmisorView.scrollToView(serieenqueestoy);

}

当我第一次运行时一切正常,但在另一次运行时,ScrollableView的视图越来越多。

有关清除scrollableView的任何建议吗?

我使用钛5.3.1,合金,Android和IOS。

新版本。不要跑

$.EmisorView.cleanup = function() {

$.destroy();
$.off();
//null your objects here

};

function ConstruyoEmisores(){

var db = Ti.Database.open('Termolink');
var rows = db.execute('SELECT * FROM Regulaciones ORDER BY Regulaciones.Nombre,Regulaciones.Serie');

NRegistros=ComprueboRegBD();

var CuantosViews=$.EmisorView.views.length;

for (i=0;i<CuantosViews;i++){
    $.EmisorView.views[parseInt(parseInt(i))].cleanup && $.EmisorView.views[parseInt(parseInt(i))].cleanup();
    $.EmisorView.removeView($.EmisorView.views[i]);
    $.EmisorView.views[i]=null;
}

var i;

var serieenqueestoy=0;

for (i=0;i<NRegistros;i++){
    TablaSerieTermostatos[i]=rows.field(0);
    TablaPinTermostatos[i]=rows.field(1);
    TablaNombreTermostatos[i]= rows.field(2);
    TablaTemperTermostatos[i]= rows.field(345);
    TablaConsignaTermostatos[i]= rows.field(5);
    TablaEstadoTermostatos[i]= rows.field(344);

    if (rows.field(0)==Serie) serieenqueestoy=i; //esto es para posicionar en el seleccionado

    var nuevaView=Ti.UI.createView();   

    var titulo1=Ti.UI.createLabel({
        id: "NombreTerm",
        text: TablaNombreTermostatos[i],
        color: "#b0acb1" ,
        textAlign: Ti.UI.TEXT_ALIGNMENT_LEFT, 
        left:"44%",
        top:"33%"
    });
    var imagen1=Ti.UI.createImageView({
        id: "Radiador",         
        image: "/figura radiador.png",
        height: "60%",
        left:"32%",
        top:"20%"
    });
    if (Ti.Platform.name=="iPhone OS") {
        imagen1.left = "13%";
    }

    nuevaView.add(imagen1);
    nuevaView.add(titulo1);                         

    $.EmisorView.addView(nuevaView);
    //$.EmisorView.insertViewsAt(i,nuevaView);

    rows.next();
}       

db.close(); 
$.EmisorView.scrollToView(serieenqueestoy);     
}

确定版本,现在运行

var CuantosViews=$.EmisorView.views.length;

for (i= CuantosViews;i>0;i--){
   $.EmisorView.removeView($.EmisorView.views[i-1]);
   $.EmisorView.views[i-1]=null;
}

感谢所有人。问题是这个循环必须从结束到开始。然后删除所有视图。

2 个答案:

答案 0 :(得分:0)

一个非常简单的解决方案是使用removeAllChildren属性。您可以找到doc here

$.EmisorView.removeAllChildren();

然后,您似乎只在创建视图时执行该功能,而不是在将焦点添加到视图时执行。所以...在Window文件中的.xml上:

<Window onFocus="onFocusWindow" />

然后在控制器中创建一个名为onFocusWindow的函数,并在那里执行removeAllChildren方法。

答案 1 :(得分:0)

如果您尝试删除ScrollableViews,则不要使用remove()或removeAllChildren()方法,而是使用removeView()方法。

这是您可以删除ScrollableView视图并清理它们的方法:

if($.scrollableview.views && parseInt($.scrollableview.views.length)) for(var i = parseInt($.scrollableview.views.length); i > 0; i--) if($.scrollableview.views[parseInt(parseInt(i)-1)]) {

    $.scrollableview.views[parseInt(parseInt(i)-1)].cleanup && $.scrollableview.views[parseInt(parseInt(i)-1)].cleanup();
    $.scrollableview.removeView($.scrollableview.views[parseInt(parseInt(i)-1)]);
    $.scrollableview.views[parseInt(parseInt(i)-1)] = null;
}

这是一个视图的示例: view.xml用

<View id="view">
    <Label id="title"/>
</View>

view.js

$.title.text = 'test';

$.view.cleanup = function() {

    $.destroy();
    $.off();
    //null your objects here
};