2013-03-06 3 views
0

Cascades (C++ 또는 QML)에서 간단한 ListView를 만들고 싶습니다. ListView의 데이터는 간단합니다. 전달할 문자열 (XML 또는 SQL 등 없음). 또한 ListView에 내가 목록보기 및 가능성이있는 ListView 자체의 항목의 모양을 사용자 정의 할 수 있도록하려면, 또한, 예를 들어,간단한 ListView 케스케이드 만들기

- Green 
     - Cucumber 
     - Peas 
     - Salad 
- Red 
     - Tomato 
     - Red Radish 
     - Carrot 

을 섹션을 가질 수있다 (예를 들어, 설정 배경 색상 설정 목록 항목의 텍스트 색상 등).

위의 내용을 달성 한 튜토리얼 또는 간단한 샘플 응용 프로그램은 크게 감사하겠습니다 !!

감사합니다.

답변

2

가장 간단한 방법은 정적 목록 만 사용하려는 경우 (런타임에 변경하지 않으려는 경우) XML 파일 (예 : assetsmodel.xml)에서로드하는 것입니다. 이 같은 폴더) :

<model> 
    <header title="Green"/> 
    <item title="Cucumber"/> 
    <item title="Peas"/> 
    <item title="Salad"/> 
    <header title="Red"/> 
    <item title="Tomato"/> 
    <item title="Red Radish"/> 
    <item title="Carrot"/> 
</model> 
귀하의 ListView 그냥 필요

그것을로드 :

ListView { 
    dataModel: XmlDataModel { 
     source: "model.xml" 
    } 
} 

를 이제, 당신은 성상을 사용자 정의하려는 경우, 당신은 단지 당신이 그들을 원하는 방법 listItemComponents에 넣어해야 표시 될 내용 :

ListView { 
    dataModel: XmlDataModel { 
     source: "model.xml" 
    } 
    listItemComponents: [ 
     ListItemComponent { 
      type: "header" 
      Container { 
       // your personal code 
      } 
     }, 
     ListItemComponent { 
      type: "item" 
      Container { 
       // your personal code 
      } 
     } 
    ] 
} 

이 컨테이너를 사용하면 자신 만의 레이아웃을 정의 할 수 있습니다. 예를 들어, 가정하여 방금 일치하는 배경 색상 헤더를 표시하려면, 당신은 다만 수 :

ListView { 
    dataModel: XmlDataModel { 
     source: "model.xml" 
    } 
    listItemComponents: [ 
     ListItemComponent { 
      type: "header" 
      Container { 
       background: { 
        if (ListItemData.title == "Green") { 
         return Color.Green 
        } else { 
         return Color.Red 
        } 
       } 
       Header { 
        title: ListItemData.title 
       } 
      } 
     }, 
     ListItemComponent { 
      type: "item" 
      Container { 
       preferredHeight: 100 
       Label { 
        text: ListItemData.title 
        verticalAlignment: VerticalAlignment.Center 
       } 
       Divider {} 
      } 
     } 
    ] 
} 

희망이 당신이 작동하는 방법의 아이디어를했다. 실제로, XML을 사용하여 - 만약 내가 제대로 이해하고

+0

감사합니다, 나는 이미 유사한 접근 방식을 사용하고 있습니다 사용하여 달성 할 수있다합니다. 그러나 이제는 데이터가 동적으로 (실행 시간에 변경 될 수 있습니까?) 데이터 모델이이 경우에 사용할 수있는 상황으로 되돌릴 필요가 있습니다. 또는 그러한 경우에해야 할 일은 무엇입니까? 감사. – user2054339

+0

안녕하세요, 데이터가 런타임에 제공되는 경우 데이터 모델로 XML을 사용할 수없는 이유는 무엇입니까? 고맙습니다. – user2054339

+0

런타임에 파일을로드하려면 C++ 코드를 사용하여 파일을로드해야하므로 XMLDataAccess (http://developer.blackberry.com/cascades/reference/bb__data__xmldataaccess.html)를 사용하여 해당 내용을 DataModel로 변환 할 수 있습니다 . –

0

당신은 안드로이드에 ExpandableListView처럼 당신이 bb::cascades::DataModel 예를 구현하는 here

+0

감사합니다. – user2054339