![](/img/trans.png)
[英]Why is onChanged not called when value changed in LiveData List?
[英]Why Gtk TextBuffer onChanged is called twice after using setText?
我试图每次通过更改buffer.setText("...")
或在用户键入某些内容时都调用一个buffer.setText("...")
的内容的函数,但是在使用setText之后,该函数被调用了两次(而不是一旦)。
package com.example;
import org.gnome.gtk.*;
public class Main {
public static void main(String[] args) {
Gtk.init(args);
Window w = new Window();
w.setDefaultSize(200, 200);
TextBuffer buffer = new TextBuffer();
buffer.setText("first text");
TextView textView = new TextView(buffer);
buffer.connect(new TextBuffer.Changed() {
@Override
public void onChanged(TextBuffer textBuffer) {
System.out.println("onChange called with " + textBuffer.getText());
}
});
buffer.setText("second text");
buffer.setText("third text");
w.add(textView);
w.connect((Window.DeleteEvent) (source, event) -> {
Gtk.mainQuit();
return false;
});
w.showAll();
Gtk.main();
}
}
此示例打印
onChange called with
onChange called with second text
onChange called with
onChange called with third text
知道为什么会这样吗? 我正在使用java-gnome 4.1和java 1.8。
gtk_text_buffer_set_text
是gtk_text_buffer_delete
和gtk_text_buffer_insert
的组合。 该函数发出"delete-range"
和"insert-text"
信号。 这些信号具有默认处理程序 。 这些处理程序发出"changed"
。
因此,实际上,对于单个gtk_buffer_set_text
调用信号按以下顺序发出:
"delete-range"
"changed"
"insert-text"
"changed"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.