2011-09-29 47 views
1

嗨,我正在开发一个使用钛的Android应用程序。点击更改图像我使用下面的代码。但问题是,当我点击图像时,它只会改变一次(第一次点击),当我再次点击它不会显示更改的图像。但在警报中显示图像源已更改。 (这些变化并不反映在屏幕上!! ??)另一个问题是当我点击(图像被改变)时,然后进入子窗口并返回。它没有保留这些变化。在表格视图中更改和保留已更改的元素钛

var feed_table = Ti.UI.createTableView({minRowHeight:5,hasChild:true}); 
var data = []; 
for (var i=0;i<5;i++) 
{ 
var row = Ti.UI.createTableViewRow({height:'auto',className:"row"}); 
var username = Ti.UI.createLabel(
{ 
    text:'nilkash', 
    height:'auto', 
    font:{fontSize:12, fontFamily:'Helvetica Neue'}, 
    width:'auto', 
    color:'#000', 
    textAlign:'left', 
    top:0, 
    left:35, 
});row.add(username); 
var doneCheckbox = Titanium.UI.createImageView(
{ 
    id:'image_'+i, 
    clickName:'ClickName', 
    image:'../images/finished-work.png', 
    width:15, 
    height:15, 
    top:32, 
    left:0, 
});row.add(doneCheckbox) 
data.push(row); 
} 
feed_table.setData(data); 
feedWin.add(feed_table); 
feed_table.addEventListener('click',function(e) 
{ 
    if (e.source.clickName == 'ClickName') 
    { 
     if(feed_table.data[0].rows[e.index].children[1].image == '../images/work.png') 
     { 
      feed_table.data[0].rows[e.index].children[1].image = '../images/finished-work.png'; 
     } 
     else if (e.source.clickName == 'ClickName') 
     { 
      feed_table.data[0].rows[e.index].children[1].image = '../images/work.png'; 
     } 
    } 
}); 

我还使用了另一种简单的解决方案,只是切换两个图像,但它也不保留这些更改。是否需要再次将更改推送到表视图?提前感谢您的帮助。

回答

1

我有同样的问题。最后,我删除了旧图像,并在每次点击事件时将其替换为新图像。这很烦人,但我找不到其他解决方案。钛的android部分有时候很怪异。

[更新] 我修改了old code一点点:

/* creates our imageView with specific url */ 
createImage = function(url) 
{ 
    var imageView = Ti.UI.createImageView(
    { 
    image:url, 
    left:0, 
    top:0, 
    height:25, 
    width:25 
    }); 

    return imageView; 
}; 

/* creates our tableview row with imageView */ 
addRow = function(_args) 
{ 
    var row = Ti.UI.createTableViewRow(
    { 
    height:'auto', 
    className:"row" 
    }); 

    var username = Ti.UI.createLabel(
    { 
    text: _args.text || 'user name', 
    height:'auto', 
    font:{fontSize:12, fontFamily:'Helvetica Neue', color:'#000'}, 
    width:'auto', 
    color:'#000', 
    textAlign:'left', 
    top:0, 
    left:35, 
    }); 
    row.add(username); 

    /* create initial imageview */ 
    var imageView = createImage(_args.image); 
    row.add(imageView);  

    /* custom function to set image */ 
    row.setImage = function(image_url) 
    { 
    /* remove the old image */ 
    row.remove(imageView);  
    imageView = null; 

    /* add new image */ 
    imageView = createImage(image_url); 
    row.add(imageView); 
    }; 

    row.addEventListener('click',function(e) 
    { 
    /* on click replace the image */ 
    row.setImage('new/image/path'); 
    }; 

    return row; 
} 

var user_table = Ti.UI.createTableView({minRowHeight:5.length,hasChild:true}); 
var data = []; 
for (var i=0;i<5.length;i++) 
{ 
    var newRow = addRow({ 
    text: 'my text', 
    image: 'my image url' 
    }); 
    data.push(newRow); 
} 

feed_table.setData(data); 
feedWin.add(feed_table); 
+0

感谢您的快速答复。但如何删除和放置在表视图中的另一个图像。是否因为我们第一次做** feed_table.setData(data);和feedWin.add(feed_table); **然后执行代码替换image.Is有任何解决方案。 – nilkash

+0

我更新了我的帖子。希望这可以帮助 – mkind

0

我更喜欢使用使用CreateView的与背景图像,它工作正常。我用它来模拟CheckBoxes,我没有问题。

0

请删除您的Ti.UI.SIZE在TableView和TableViewRow的高度和宽度...它将工作。

相关问题