2011-10-28 26 views
2

我收到日誌中的以下消息和一個有錯誤的導航組 2011-10-27 21:41:21.575 bugtitanium[15903:207] nested push animation can result in corrupted navigation bar 2011-10-27 21:41:21.945 bugtitanium[15903:207] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 2011-10-27 21:41:21.946 bugtitanium[15903:207] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 附加的代碼重現;在第一次加載時,一切正常,點擊1次重新加載,點擊一行,然後單擊後退按鈕 做相同的和重新加載2次,你將不得不按下後退按鈕2次,等等.... 有人可以爲我提供解決方法或修復嗎? 我需要加載和填充表的異步處理錯誤在Appcelerator的鈦:嵌套推動畫可導致損壞的導航欄

代碼

Titanium.UI.setBackgroundColor('#000'); 
var tabGroup = Titanium.UI.createTabGroup(); 
var win1 = Titanium.UI.createWindow({ 
title:'Tab 1', 
backgroundColor:'#fff' 
}); 

var mytasks_helping_button = Ti.UI.createButton({ 
      title : 'Reload', 
      top:0, 
      color:'black', 
      width:200, 
      height:30, 
      style:Ti.UI.iPhone.SystemButtonStyle.BORDERED 
}); 
win1.add(mytasks_helping_button); 

var mytasks_helping_tableview = Titanium.UI.createTableView({ 
top:100 
}); 
win1.add(mytasks_helping_tableview); 

var tab1 = Titanium.UI.createTab({ 
icon:'KS_nav_views.png', 
title:'Tab 1', 
window:win1 
}); 

function populateData(datasourcetmp,tabletmp){ 
var data = []; 
for(i = 0; i < datasourcetmp.length; i++) { 
      var row = Titanium.UI.createTableViewRow({ 
       height : 120, 
       backgroundColor:'#fff', 
       borderWidth : 0, 
       borderColor : 'transparent' 
      }); 

      var my_tasks_table_top_label = Titanium.UI.createLabel({ 
       text : 'test row:'+i+' date:'+new Date(), 
       width : "100%", 
       font : { 
        fontSize : 12, 
        fontFamily : 'Helvetica' 
       }, 
       color : "black", 
       top : 30, 
       height : 20, 
       left : 5 
      }); 
      row.add(my_tasks_table_top_label); 

      data.push(row); 
}; 

mytasks_helping_tableview.addEventListener('click', function(e) { 

      //view a task screen 
      var viewTask = Titanium.UI.createWindow({ 
       height : "100%", 
       width : "100%", 
       title : "Helping with", 
       barColor : 'lightGray' 
      }); 

      var viewTask_top_label = Titanium.UI.createLabel({ 
       text : 'nested view '+ e.index, 
       width : "80%", 
       font : { 
        fontSize : 15, 
        fontFamily : 'Helvetica' 
       }, 
       color : "gray", 
       top : 10, 
       height : 20, 
       left : 60 
      }); 
      viewTask.add(viewTask_top_label); 


      tab1.open(viewTask); 
     }); 

tabletmp.setData(data); 
} 
var datasource = ['1','2','3','4','5','6','7']; 
populateData(datasource,mytasks_helping_tableview); 

mytasks_helping_button.addEventListener('click', function(e) { 

populateData(datasource,mytasks_helping_tableview); 

}); 

tabGroup.addTab(tab1); 

tabGroup.open(); 

回答

0

在上面的代碼中,要添加每次調用populateData事件偵聽器

mytasks_helping_tableview.addEventListener('click', function.... 

添加事件偵聽器不會「取代」現有的事件偵聽器,它是第一個「負荷」發射後,多個時間和打開多個窗口。

只需將mytasks_helping_tableview.addEventListener調用移動到populateData函數的外部即可。

0

其實更靈活的方式來解決,使代碼通過使用不同的表補償是創建映射表的實例,每次刪除以前的實例和重建

Titanium.UI.setBackgroundColor('#000'); 
    var tabGroup = Titanium.UI.createTabGroup(); 

    var win1 = Titanium.UI.createWindow({ 
     title:'Tab 1', 
     backgroundColor:'#fff' 
    }); 


    var mytasks_helping_button = Ti.UI.createButton({ 
      title : 'Reload', 
      top:0, 
      color:'black', 
      width:200, 
      height:30, 
      style:Ti.UI.iPhone.SystemButtonStyle.BORDERED 
    }); 
    win1.add(mytasks_helping_button); 


    var tab1 = Titanium.UI.createTab({ 
     icon:'KS_nav_views.png', 
     title:'Tab 1', 
     window:win1 
    }); 

    var tableView={}; 

    function populateData(datasourcetmp,tableName){ 

    if(tableView[tableName]){ 
    win1.remove(tableView[tableName]); 
    delete tableView[tableName]; 
    } 

    var tabletmp = Titanium.UI.createTableView({ 
    top:100 
    }); 
    win1.add(tabletmp); 
    tableView[tableName] = tabletmp; 

    var data = []; 
    for(i = 0; i < datasourcetmp.length; i++) { 
      var row = Titanium.UI.createTableViewRow({ 
       height : 120, 
       backgroundColor:'#fff', 
       borderWidth : 0, 
       borderColor : 'transparent' 
      }); 

      var my_tasks_table_top_label = Titanium.UI.createLabel({ 
       text : 'test row:'+datasourcetmp[i]+' date:'+new Date(), 
       width : "100%", 
       font : { 
        fontSize : 12, 
        fontFamily : 'Helvetica' 
       }, 
       color : "black", 
       top : 30, 
       height : 20, 
       left : 5 
      }); 
      row.add(my_tasks_table_top_label); 

      data.push(row); 
}; 

tabletmp.addEventListener('click', function(e) { 
      //view a task screen 
      var viewTask = Titanium.UI.createWindow({ 
       height : "100%", 
       width : "100%", 
       title : "Helping with", 
       barColor : 'lightGray' 
      }); 

      var viewTask_top_label = Titanium.UI.createLabel({ 
       text : 'nested view '+ e.index, 
       width : "80%", 
       font : { 
        fontSize : 15, 
        fontFamily : 'Helvetica' 
       }, 
       color : "gray", 
       top : 10, 
       height : 20, 
       left : 60 
      }); 
      viewTask.add(viewTask_top_label); 


      tab1.open(viewTask); 
     }); 

     tabletmp.setData(data); 
    } 



    var datasource = ['1','2','3']; 
     populateData(datasource,'mytasks'); 

    mytasks_helping_button.addEventListener('click', function(e) { 
     datasource = ['4','5','6','7']; 
    populateData(datasource,'mytasks'); 
    }); 

    tabGroup.addTab(tab1); 
    // open tab group 
    tabGroup.open(); 
+0

確保運行此通過儀器,並確保「老」桌子的TiProxy不在附近。 –