Como fazer uma lista de acordeões com o RadListView? (Nativescript)
Estou mostrando dados com o RadListView que possui categorias e subentradas (Nativescript Angular, iOS
Eu quero que a página carregue mostrando apenas as categorias e, se o usuário clicar em qualquer categoria, ele alterna as entradas (mostrando no clique e depois ocultando outro clique
Isso é possível
Não vi isso com êxito com a versão atual do pro ui e do NS. Não consegui fazê-lo funcionar sozinho.
Mais detalhes sobre outras abordagens sãoAqu.
Existe um plug-in de acordeão NS, mas acho que o objetivo aqui deve ser possível com código direto, especialmente porque no meu caso eu quero personalizar um pouc
Eu tive dois problemas:
1)Como isolar o clique na própria categoria? A função de agrupamento parece "ocultar" o título da categoria programaticamente - não pude saber quando o usuário clica nele (em vez de registrar apenas cliques em todo o grupo) e não foi capaz de estilizar o cabeçalho do grupo.
2) Uma vez clicado no cabeçalho da categoria, como mostro / oculto as entradas abaix Normalmente, eu usaria algo comovisibility="{{isClicked ? 'visible' : 'collapsed'}}
, mas isso não está funcionando com RadListVie
Aqui está um exemplo de código para dar uma noção melhor do objetivo:
html:
<GridLayout >
<RadListView [items]="places" selectionBehavior="Press" (itemSelected)="itemSelected($event)" [groupingFunction]="myGroupingFunc" >
<ng-template tkListItemTemplate let-place="item" >
<StackLayout>
<Label [text]="place.city"></Label>
<Label [text]="place.people" ></Label> //NOTE: I have not yet determined how to show this second level data within RadListView.
</StackLayout>
</ng-template>
</RadListView>
</GridLayout>
ts:
import { Component, OnInit, } from "@angular/core";
import { Router, } from "@angular/router";
import { ObservableArray } from "tns-core-modules/data/observable-array";
import { RadListView, ListViewEventData, } from "nativescript-ui-listview";
@Component({
selector: "Sample",
moduleId: module.id,
templateUrl: "./sample.component.html",
})
export class SampleComponent implements OnInit {
public places = [
{country: 'US', city: 'New York', people: [{name: 'Bill', age: 22}, {name: 'Suzy', age: 23} ] },
{country: 'US', city: 'Los Angeles', people: [{name: 'Sarah', age: 21}, {name: 'Barb', age: 23} ] },
{country: 'Canada', city: 'Toronto', people: [{name: 'Fred', age: 30}, {name: 'Ted', age: 31} ] },
{country: 'England', city: 'London', people: [{name: 'Jim', age: 22}, {name: 'Joe', age: 19} ] }
]
constructor() {
}
myGroupingFunc(value) {
return value.country;
}
itemSelected(args) {
/***is there a way this can isolate the tap on country name?*****/
}
}