Nativescript: RadListView, как программно переключать макет (listViewLayout)

У меня очень распространенный сценарий, когда пользователь может переключать макет списка между линейным / сетчатым / шахматным представлением, нажав значок. Раньше у меня было 2 списка - ListView для стандартного макета списка и RadListView для просмотра сетки. Я их скрывал и показывал в зависимости от требуемого «режима». Но поскольку в RadListView есть все необходимые макеты, теоретически я могу иметь только один список и повторно использовать его, переключая макеты. Я не нашел, как сделать это непосредственно в XML (это был бы лучший подход, если он есть), поэтому я думаю сделать это программно в коде позади.

Вот моя попытка:

    function _switchListViewLayout() {
        const list = modal.getViewById( 'list' )
        let layout

        if ( list.listViewLayout instanceof ListViewLinearLayout ) {
            // switch to grid
            layout = new ListViewGridLayout()
            layout.scrollDirection = 'vertical'
            layout.itemHeight = 150
            layout.spanCount = 2
        }

        else if ( list.listViewLayout instanceof ListViewGridLayout ) {
            // switch to list
            layout = new ListViewLinearLayout()
            layout.scrollDirection = 'vertical'
            layout.itemHeight = 66
        }

        list.listViewLayout = layout
        list.refresh()
    }

Это правильный способ или я делаю не так?


person terreb    schedule 23.08.2017    source источник
comment
У меня есть простой пример NativeScript-Angular, но я думаю, вы его не используете, верно?   -  person Eddy Verbruggen    schedule 23.08.2017
comment
Я всегда могу настроить пример Angular для vanilla Nativescript, если вы переключите listViewLayout там, пожалуйста, поделитесь.   -  person terreb    schedule 24.08.2017


Ответы (1)


Да, именно так вы можете изменить listViewLayout компонента RadListView. Я вижу, что у вас есть вызов метода .refresh(), в этом нет необходимости, вам просто нужно установить новое значение для свойства listViewLayout.

Вы можете изменить в официальных примерах для RadListView здесь.

person Vladimir Amiorkov    schedule 24.08.2017
comment
Отлично, спасибо! Вы, ребята, тоже планируете реализовать их переключение в XML? Как и templateSelector, это может быть layoutSelector. Было бы здорово! - person terreb; 24.08.2017
comment
В ближайшее время нет планов по добавлению такой функциональности селектора в RadListView. Если вы чувствуете, что это может быть полезно для компонента, вы можете использовать портал обратной связи (github. com / telerik / nativescript-ui-feedback / issues) и добавьте его в качестве запроса функции. - person Vladimir Amiorkov; 24.08.2017
comment
Ссылка сейчас не работает. Я бы хотел увидеть официальный документ по этому поводу. - person Gabriel Cséfalvay; 06.07.2018
comment
Я обновил свой ответ новыми ссылками, спасибо, что указали на это. - person Vladimir Amiorkov; 06.07.2018