【问题标题】:select particular element in row of table view in titanium在钛表视图的行中选择特定元素
【发布时间】:2011-09-27 08:09:31
【问题描述】:

您好,我正在使用 Titanium 开发 Android 应用程序。我想在点击事件上更改图像。但我无法在表格视图中选择特定图像。我使用了以下代码:

var user_table = Ti.UI.createTableView({minRowHeight:5.length,hasChild:true});
var data = [];
for (var i=0;i<5.length;i++)
    {
        var row = Ti.UI.createTableViewRow({height:'auto',className:"row"});
        var username = Ti.UI.createLabel(
        {
            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);
var imageView = Ti.UI.createImageView(
        {
            image:'../images/user.png',
            left:0,
            top:0,
            height:25,
            width:25
        });row.add(imageView);          
    }
    feed_table.setData(data);
    feedWin.add(feed_table); 

我想在表格视图的特定行中定位图像,以便在单击事件时将其替换为另一个图像。帮我选择那个特定的图像

【问题讨论】:

    标签: javascript android titanium


    【解决方案1】:

    1) 在表格视图中,在整行上设置事件监听器。

    tableView.addEventListener('click',function(event){
        if ( event.source.id === undefined ) {
            // if no id defined then you know it is not an image...
        } else {
            // you have an id, you have an image..
            var rowNumber = event.index;
            var image = event.source;
        }
    });
    

    2) 创建图片时,为每张图片设置一个 id,以便在点击事件中识别它

    var imageView = Ti.UI.createImageView({
        id :"image_"+ i, // set object id
        image:'../images/user.png',
        left:0,
        top:0,
        height:25,
        width:25
     });
    

    【讨论】:

    • 嗨 Aaron 感谢您的回复。我尝试了上面的代码,但它给了我错误 "event" is not defined.
    • 对不起,代码并不完美,但你应该可以用大约30行代码对一个未定义的变量进行简单的调试和分析?已进行更改
    【解决方案2】:

    我会这样做:

    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);
    
      var imageView = Ti.UI.createImageView(
      {
        image:_args.image||'../images/user.png',
        left:0,
        top:0,
        height:25,
        width:25
      });
      row.add(imageView);    
    
      row.setImage = function(image)
      {
        imageView.imageURL = image;
      };
    
      row.addEventListener('click',function(e)
      {
        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); 
    

    如果你需要设置 url 你也应该使用

    feedWin.data[0].rows[indexOfRow].setImage('another/image/path');
    

    试一试。没有编译,所以这只是一个建议。

    [更新]请注意,'auto' 值可能会影响 android。

    【讨论】:

    • 我投了反对票有几个原因:这里可以避免很多复杂性。不需要向每一行添加事件侦听器,并且会引入额外的权重。正如 Aaron 的示例所示,您可以改为向整个表添加一个侦听器并查看单击了哪些元素 (event.source) 以控制单击元素时发生的情况。我还建议您不要在每一行上存储函数。如果你有几千行,这意味着几千个独特的功能,而你真的只需要一个。有意义吗?
    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多