0

У меня есть ListView, но мне нужно добавить ячейки в каждый ListItem, я никогда не знаю, сколько ячеек мне нужно добавить, это возможно?Добавить контроллеры в шаблон ListView

Я не могу добавлять представления к элементу ListItem внутри шаблона, у меня id и bindId равно «строке» элемента ListItem.

Единственное другое решение, о котором я могу думать, это иметь 12 ячеек и скрыть те, которые мне не нужны.

//widget.xml 
<Alloy> 
    <View id="widget"> 
     <ListView id="list" defaultItemTemplate="list"> 
      <Templates> 
       <ItemTemplate name="list" bindId="row" id="row"/> 
      </Templates> 
      <ListSection/> 
     </ListView> 
    </View> 
</Alloy> 

Я массив с bindId, чтобы добавить к каждой ячейке:

//cell.js 
$.title.bindId = args.cell; 

//cell.xml 
<Alloy> 
    <View id="cell"> 
     <Label id="title"/> 
    </View> 
</Alloy> 

Я 12 ячеек, с шириной набора равен 0, и я устанавливаю только ширину на столбцы, которые я использую, остальные остаются скрытыми. Это мой фактический файл:

<ListView id="list" defaultItemTemplate="item"> 
    <Templates> 
     <ItemTemplate name="item" class="item" id="item" bindId="item"> 
      <View id="row" bindId="row"> 
       <View class="cell" bindId="cell1" id="cell1"> 
        <View class="border left"/> 
        <Label class="title" bindId="title1" id="title1"/> 
        <View class="border right"/> 
        <View class="line"/> 
       </View> 
       .... 
       <View class="cell" bindId="cell12" id="cell12"> 
        <View class="border left"/> 
        <Label class="title" bindId="title12" id="title12"/> 
        <View class="border right"/> 
        <View class="line"/> 
       </View> 
      </View> 
     </ItemTemplate> 
    </Templates> 
    <ListSection/> 
</ListView> 

Это часть моего контроллера:

data.items = []; 

for(var i = 0; i < 100; i++) if(data.list[i]) { 

    var row = { 
     properties:{ 
      searchableText:'' 
     } 
    }; 

    for(var c in args.columns) { 

     row.properties.searchableText += data.list[i][args.columns[c].alias]+' '; 

     row['cell'+parseInt(parseInt(c)+1)] = { 
      width:data.width 
     }; 

     row['title'+parseInt(parseInt(c)+1)] = { 
      text:data.list[i][args.columns[c].alias] 
     }; 
    } 

    data.items.push(row); 
}; 

$.list.sections[0].setItems(data.items); 

ответ

1

Я думаю, что вы ищете является UICollectionView для прошивки или GridLayout для Android. Вы можете использовать модуль Марселя, чтобы использовать это в Titanium:

https://github.com/mpociot/TiCollectionView

Если вы действительно должны использовать ListView, то да, я думаю, что вы придумали довольно много единственный путь.

+0

Спасибо, еще один вопрос, о макете сетки, есть способ сделать это в сплаве? ListView повернул -90º градусов? Чтобы проверить, могу ли я найти способ обхода решения: https://stackoverflow.com/questions/35433035/tableview-content-hidden-on-rows-that-are-not-screen-visible-android –

+0

Другая память/производительность сомните, какой лучший метод: 1) 1 шаблон с 12 столбцами; 2) 12 шаблонов с правильным количеством столбцов для каждого из них? –

+0

Тебе придется протестировать, но я думаю, что 12 шаблонов будут работать лучше, особенно если у вас много строк. –

Смежные вопросы