2012-09-05 2 views
1

현재 이미지 옆에 뉴스 스 니펫을 표시하는 앱의 일부로 작업 중입니다 (이미지가있는 경우). 이 뉴스 목록은 SegmentedControl "탭"페이지의 일부이며 사용자가 필요에 따라 숨기거나 다시 표시 할 수 있습니다. 이미지는 네트워크를 통해로드되므로 ImageTracker가 처리하고 완전히로드 된 속성으로 만 설정됩니다.ListView를 숨기고 다시 표시 할 때 이미지가 사라짐

내가 가지고있는 문제는 다른 SegmentControl "탭"으로 이동 한 다음 뉴스 탭으로 다시 이동하면 이러한 이미지가 처음로드 될 때 이미지가 사라지는 것입니다. 숨기기 작업은 비활성 컨테이너의 가시성을 false로 설정하고 활성 컨테이너의 가시성을 true로 설정하여 수행됩니다. ListView에 { ID : lstShowNews 개체 이름 : "lstShowNews"

listItemComponents: [ 
     ListItemComponent { 
      type: "item"  
      Detail_Tabs_NewsCell { 
       newsHeadline: ListItemData.headline 
       newsBlurbPreview: ListItemData.content 
       newsTimeAdded: ListItemData.time  
       newsImageVisible: ListItemData.hasImage 
       newsImage: ListItemData.image        
      } 
     } 
    ] 
} 

별명/사용자 정의 목록 항목의 속성 :

property alias newsImageVisible: newsImage.visible 
property alias newsHeadline: newsTitle.text 
property alias newsImage: newsImage.image 
property string newsBlurbPreview: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam condimentum tellus vel magna dapibus aliquam. Nunc iaculis metus ut arcu tempus semper." 
property string newsTimeAdded: "News Source - 3 hours ago" 

이 내가 데이터 바인딩을 정의하고있어 어떻게

목록로드를 처리하는 C++ 코드 섹션 :

/*! 
* Handles loading for each tab page. Enables data to only be loaded on demand. 
* @param index - The new selected index on the SegmentedControl 
*/ 
void MyClass::onSegmentChanged(int index) { 
if(index == 2) { 
    if(!mNewsLoaded) { 
     // Load the news 
     NewsRequester* news = new NewsRequester(mId); 
     connect(news, SIGNAL(requestDone(QList<NewsItem*>)), this, SLOT(onNewsReceieved(QList<NewsItem*>))); 
     indNews->start();   // Activity indicator 
     news->requestNews(); 
    } 
    else { 
     // Caching functions 
    } 
} 
else { 
    // Stuff for other tabs 
} 
} 

void MyClass::onNewsReceieved(QList<NewsItem*> newsItems) { 
    qDebug() << "Received news reply"; 
    indNews->stop(); 
    indNews->setVisible(false); 

    mNewsItems = newsItems; 
    setNewsModel(); 

} 

void MyClass::setNewsModel() { 
GroupDataModel* newsModel = new GroupDataModel(QStringList() << "news"); 
newsModel->setGrouping(ItemGrouping::None); 

// Move the list items to the data model 
for(int i = 0; i < mNewsItems.size(); i++) { 
    mNewsItems.at(i)->loadImage(); 
    newsModel->insert(mNewsItems.at(i)); 
} 

ListView* lstNews = root->findChild<ListView*>("lstShowNews"); 
lstNews->setDataModel(newsModel); 
} 
mLocalCascadesImage에 대한

/*! 
* Tracks the status of the current local image and displays when ready 
*/ 
void NewsItem::trackImage() { 
// Load cascades image 
mTracker = new ImageTracker(mLocalImage); 
connect(mTracker, SIGNAL(stateChanged (bb::cascades::ResourceTracker::State)), 
     this, SLOT(onStateChanged (bb::cascades::ResourceTracker::State))); 
} 

/*! 
* Passes the downloaded image's path to the list 
*/ 

void NewsItem::onImageRetrieved(QString path) { 
//qDebug() << "Received image " << path; 
mLocalImage = QUrl(path); 
trackImage(); 
} 

/*! 
* Display the image if it's been fully loaded in memory 
*/ 
void NewsItem::onStateChanged(bb::cascades::ResourceTracker::State state) { 
if(state == bb::cascades::ResourceTracker::Loaded) { 
    qDebug() << "Image loaded"; 
    mLocalCascadesImage = mTracker->image(); 
    emit localImageChanged(); 
} 
} 

속성 : 이미지를 추적하고 목록에 전달되기 전에 제대로 장전 보장

기능

Q_PROPERTY(bb::cascades::Image image READ localImage NOTIFY localImageChanged) 

리스트 뷰가에 무례한 행동을 할 이유에 어떤 이유가 있나요 이 방법? 감사.

답변

0

직접 해결. 밝혀졌습니다. newsImage.imageSource 속성을 공개해야하며 가능한 경우 로컬 캐시 된 버전의 이미지에 경로를 전달해야했습니다. image 속성은 이미지를 다운로드하자 마자 바로 표시되도록하기 때문에 편리하지만 로컬에서 사용 가능한 파일에는 imageSource 속성을 사용해야합니다.

관련 문제