如何获取vala中Gtk.ListBox中项的索引或位置?

时间:2014-07-22 20:29:20

标签: listbox gtk vala

我想要一个行为,如果你点击第一个listitem打开做一件事,如果我点击第二个listitem做其他事情。第三和第二个相同。

与交换机相似但在iconview中没有(我设置了animason和gtk.stack): https://www.youtube.com/watch?v=Lj2wKNYVFR8

这是代码:

var listbox = new Gtk.ListBox();
listbox.set_activate_on_single_click(true);

var l = new Watcher.List.ListItem("title", "subtitle");
listbox.insert(l, 0);
var l2 = new Watcher.List.ListItem("title2", "subtitle2");
listbox.insert(l2, 1);

“l”和l2是一个Gtk.ListBoxRow对象,所以基本上我将2个listboxrow项添加到列表框中。

点击Item do stuff:

listbox.row_selected.connect( ()=>{
    stack.set_visible_child_name("new");
    back.set_child_visible(true);   
});

无论是单击列表中的第一项还是第二项,它都将始终显示名为“new”的堆栈子项。我可以访问ListBoxRow索引,但这仅适用于特定的行。

我需要将自定义格式化的项目添加到列表中,并且我被告知ListBox可以执行此操作。 (其他人不能?) 我的ListBoxRow只是一个有两个标签的网格,但我想稍后添加一些按钮。

1 个答案:

答案 0 :(得分:1)

查看Listbox.row_selected()的{​​{3}}:您会看到它有一个ListBoxRow参数。您应该更新row_selected闭包以获得该参数 - 然后您可以使用闭包内的行来确定要设置的子项可见。

如果您确实需要知道列表框中行的索引,请致电row.get_index()