Ошибка в appcelerator titanium: вложенная push-анимация может привести к повреждению панели навигации - PullRequest
2 голосов
/ 28 октября 2011

Я получаю следующее сообщение в журналах и глючной группе навигации. 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 раза, и так далее .... Может кто-нибудь предоставить мне обходной путь или исправить, пожалуйста? Мне нужно загрузить и заполнить таблицу как асинхронные процессы

код

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();

Ответы [ 2 ]

0 голосов
/ 29 октября 2011

На самом деле более гибкий способ исправления, позволяющий использовать код для разных таблиц, - это создать карту экземпляров таблицы и каждый раз удалять предыдущий экземпляр и перестраивать

    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 голосов
/ 29 октября 2011

В приведенном выше коде вы добавляете прослушиватель событий каждый раз, когда вызываете populateData.

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

Добавление прослушивателя событий НЕ «заменяет» существующий прослушиватель событий, поэтомузапускается несколько раз после первой загрузки и открытия нескольких окон.

Просто переместите вызов mytasks_helping_tableview.addEventListener за пределы функции populateData.

...