【问题标题】:Tap on event inside List-View点击列表视图中的事件
【发布时间】:2016-12-10 07:15:15
【问题描述】:

我在我的 nativescript 项目中使用列表视图,我想处理列表视图中特定对象的点击事件。 假设我们有这个 xml:

<ListView items="{{ friends }}">
    <ListView.itemTemplate>
        <StackLayout>
            <Label id="lbl_0" text="Say Hello!"/>
            <Label id="lbl_1" text="Say Goodbye!"/>
        </StackLayout>
      </ListView.itemTemplate>
</ListView>

现在,如果我想为列表中的每个项目激活一个处理程序以在 lbl_0 上进行点击并为 lbl_1 激活不同的处理程序,我如何告诉我的列表视图执行此操作。 我试过这段代码:

listView.on(listViewModule.ListView.itemTapEvent, function (args: listViewModule.ItemEventData) {
    var tappedItemIndex = args.index;
    var tappedItemView = args.view;
    // Do someting
});

但是 tappedItemView 包含 stacklayout 对象而不是我单击的标签。 有人知道如何设置吗?谢谢。

【问题讨论】:

    标签: android listview nativescript


    【解决方案1】:

    您只需为每个标签单独设置tap event,也适用于其他UI组件(例如按钮):

    <ListView items="{{ friends }}">
        <ListView.itemTemplate>
            <StackLayout>
                <Label id="lbl_0" text="Say Hello!" tap="sayHello"/>
                <Label id="lbl_1" text="Say Goodbye!" tap="sayGoodbye"/>
            </StackLayout>
          </ListView.itemTemplate>
    </ListView>
    

    然后在js文件中:

    function sayHello(args) {
        // Your code
    }
    exports.sayHello = sayHello;
    

    或者ts:

    export function sayHello(args) { 
        // Your code
    }
    

    【讨论】:

    • 感谢您的回答,工作正常。最后一个问题,我有一个包含所有功能的视图模型文件,如何在视图模型中调用 sayHello 函数?谢谢
    • 不客气,如果我的回答解决了你的问题,请标记已回答的问题,以便其他人知道。关于你的第二个问题,我不明白你的想法,你能否解释得更清楚或创建另一个问题?是的
    • 事实上,当我使用 listview 的 itemTap 属性时,我在 ars 中获得了被点击的项目的索引,但是在标签中使用这种方法,我怎么能得到点击标签的项目的索引。
    • 可以得到绑定到标签中的对象,即args.object.bindingContext。该对象是您的项目列表数组的一个元素,即friends,因此您可以使用indexOf 查找该对象在数组中的索引
    • var obj = args.object.bindingContext; var index = friends.indexOf(obj);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多