0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

TabGroupを使ってtabを表示した時にfocusイベントが発生しない

hohta
hohta 20

投稿日:2014-04-16 18:04:07

titanium 3.2.1.201402041146
を使用してiPhone向けのアプリを開発しております。

tabの内容を表示する度に更新したいのですが、
tabを表示した際にfocusイベントが発生せず、実現出来ずにおります。

1年ほど前に開発した際には動作していたのですが、昨年末頃からイベントが取得出来なくなりました。どのように実装したらよいかどなたかご存知ないでしょうか。

以下は実際のコードになります(不要と思われる部分は省きました)

#app.js
    var self = Titanium.UI.createTabGroup({});

    var window1 = require('sampleView1');
    var win1 = new window1();
    var tab1 = Titanium.UI.createTab({
        icon:'images/icon_sample1.png',
        window:win1,
        titleid: 'sample1'
    });
    win1.containingTab = tab1;

    var window2 = require('sampleView2');
    var win2 = new window2();
    var tab2 = Ti.UI.createTab({
        icon:'images/icon_sample2.png',
        window:win2,
        titleid: 'sample2'
    });
    win2.containingTab = tab2;
    self.addTab(tab1);
    self.addTab(tab2);
    self.setActiveTab(1);

    self.open();

#sampleView1.js
function sampleView1(_args) {
    function loadTable (arg1, arg2, tableView) {
        var currentData = [];// 実際にはここにTableViewRowの配列が入ります
        tableView.setData(currentData);
    }
    var tableView = Ti.UI.createTableView({
    });
    self.add(tableView);
    self.addEventListener('focus', function (e) {
        loadTable(1, 2, tableView);
    });
}


回答

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

0

Thumbsdown

うーん

Window側を以下のようにして確認しましたが、正常に動作しました。SDK 3.2.3.GAです。

問題の切り分けとして、setDataが実行されないのか、そもそもfocusが呼ばれないのか確認した方がいいと思います。focusのeventListenerにalertを入れてそこが実行されているかどうかも確認してみてください。

function ApplicationWindow(title) {
  var self = Ti.UI.createWindow({
    title:title,
    backgroundColor:'white'
  });
  var table = Ti.UI.createTableView({
    top: 0,
    data: []
  });
  self.add(table);

  var base = 1;
  self.addEventListener('focus', function(){
    var rows = [];
    for(i = 0; i < 3; base++, i++){
      var title = base;
      rows.push({title: title.toString()});
    }
    table.setData(rows);
  });
  return self;
}
module.exports = ApplicationWindow;

ログインすると回答することができます。