[英]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.