【问题标题】:clear views in ScrollableView在 ScrollableView 中清除视图
【发布时间】:2016-07-28 08:11:00
【问题描述】:

我有一个钛合金项目。 然后在屏幕上我有一个 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;
}

感谢所有人。问题是这个循环必须从头到尾。然后删除所有视图就好了。

【问题讨论】:

    标签: view titanium appcelerator scrollable


    【解决方案1】:

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

    $.EmisorView.removeAllChildren();
    

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

    <Window onFocus="onFocusWindow" />
    

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

    【讨论】:

    • 您是否也遵循了我的其他建议?您是否在要删除视图的那一刻调用该函数?它不会自行执行。并且将它放在控制器的根目录中只会在创建时执行
    • 当您希望它为空时,请尝试手动调用该函数。 onFocus 是我的猜测
    【解决方案2】:

    如果您尝试删除 ScrollableView,请不要使用 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;
    }
    

    这是一个视图示例: 视图.xml

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

    view.js

    $.title.text = 'test';
    
    $.view.cleanup = function() {
    
        $.destroy();
        $.off();
        //null your objects here
    };
    

    【讨论】:

    • 你不能按升序删除视图,这就是为什么我在那个循环中有一个 desc 顺序。你的问题是关于那个的,对吗?还是我错过了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多