Как я могу гарантировать, что удаленное изображение imageView будет отображаться в окне с scrollView? - PullRequest
0 голосов
/ 08 мая 2011

Я проверил много вещей, чтобы решить мою проблему, но сейчас я понятия не имею, как это исправить. В интернете я узнал, что «событие загрузки» imageView может работать, но это не так.

У меня есть следующий код:

var thisWin = Ti.UI.currentWindow;


// Sets the HTTP request method, and the URL to get data from
loader.open("GET","http://myserver/foo/")

// Send the HTTP request
loader.send();

// Runs the function when the data is ready for us to process
loader.onload = function() 
{   
    var rest_result = JSON.parse(this.responseText);

    var scrollView = Ti.UI.createScrollView({
        contentWidth: 'auto',
        contentHeight: 'auto',
        top:0,
        left:0,
        showVerticalScrollIndicator: true,
        scrollType: 'vertical',
        backgroundColor:'#fff'
    });

    var label_headline_general = Ti.UI.createLabel({
        color:'#0066cc',
        text:'My Headline 1',
        font:{fontSize:14,fontFamily:'Helvetica Neue'},
        shadowColor: '#bfd9f2',
        shadowOffset:{x:1, y:1},
        textAlign:'left',
        width:'auto',
        height:'auto',
        left:5,
        top:6
    });

    var label_headline_main = Ti.UI.createLabel({   
        color:'#003366',
        text:rest_result.name,  
        font:{fontSize:18,fontWeight:'bold',fontFamily:'Helvetica Neue'},
        shadowColor: '#ddeeff',
        shadowOffset:{x:1, y:1},    
        textAlign:'left',
        width:'auto',           
        height:'auto',
        left:5,
        top:label_headline_general.size.height + 5
    });

    // imageURI is something like: http://foo/myimage.png
    var imageURI = rest_result.image;

    if(imageURI == '')
    {
        imageURI = 'my-fallback-image.png';
    }

    var my_image = Ti.UI.createImageView({
        image:imageURI,
        defaultImage:'my-fallback-image.png',
        width:'auto',
        height:'auto',
        top:0,
        left:0
    });

    my_image.addEventListener('load',imageIsLoaded);

function imageIsLoaded(e) { 
    my_image.image = imageURI;
    my_image.show();
}

    scrollView.add(label_headline_general);
    scrollView.add(label_headline_main);
    scrollView.add(label_image);

    thisWin.add(scrollView);
}

В Titanium-эмуляторе код работает нормально и изображение, если у JSON было изображение, показывалось, а на устройстве - нет. На устройстве отображается изображение по умолчанию. Я думаю, что у меня проблема с синхронизацией (все элементы отображаются быстрее, чем изображение).

Я тестировал тот же подход с окном и без scrollView, и он работал. В этом случае изображение было загружено каждый раз правильно на каждом устройстве.

Как я могу убедиться, что удаленное изображение в imageView "my_image" загружено в scrollView и будет отображаться на 100%? Есть ли техника?

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2011

Согласно этой записи вы можете дважды наблюдать за событием load, хотя это скорее похоже на ошибку, чем на функцию.

...