2014-03-13 50 views
2

所以,我正在構建一個鵝卵石應用程序,並讓我的頭在一些事情我首先做一些測試與電話到鵝卵石連接。儘管如往常一樣,我陷入了最基本的部分。初始文本沒有被顯示,屏幕只是空白。鵝卵石不顯示文字

下面是相關代碼:

static void change_text(Layer *layer, GContext *ctx){ 
    text_layer_set_text(textLayer, textRecieved); 
    APP_LOG(APP_LOG_LEVEL_DEBUG, "Changing to: %s", textRecieved); 
} 

static void window_load(Window *window){ 

    GRect bounds = layer_get_bounds(window_get_root_layer(window)); 
    textLayer = text_layer_create(GRect(5,5, bounds.size.w-10, 30)); 

    textRecieved = (char *) malloc(BUFFER_SIZE); 
    memset(textRecieved,0,BUFFER_SIZE); 
    strcpy(textRecieved, "Nothing yet."); 

    text_layer_set_text(textLayer, textRecieved); 
    layer_add_child(window_get_root_layer(window), text_layer_get_layer(textLayer)); 

    APP_LOG(APP_LOG_LEVEL_DEBUG, "Recieved: %s", textRecieved); 
    layer_set_update_proc(text_layer_get_layer(textLayer), change_text);  
} 

相關變量的定義(在最頂層的文件):

TextLayer* textLayer; 
const int BUFFER_SIZE = 100; 
char* textRecieved; 

如果我註釋掉*layer_set_update_proc(...);*線,我可以看到的文字。我可能在change_text方法中做錯了什麼。 (它得到window_load不久後調用。)從我的調試打印輸出是:

[DEBUG] app_message.c:70: Recieved: Nothing yet. 
[DEBUG] app_message.c:55: Changing to: Nothing yet. 
+0

你爲什麼要叫'layer_set_update_proc'?這覆蓋了文本圖層的繪圖行爲,所以它不會自行繪製。 –

+0

哦!我認爲這是編輯任何元素的正確方法。所以我可以在任何地方改變文字? – SiXoS

回答

2

你不應該叫layer_set_update_proc()。通過這樣做,您可以覆蓋默認的text_layer繪圖機制。這就是爲什麼你沒有看到屏幕上的任何東西。

其他一些意見:

  • 是的,你可以叫text_layer_set_text(),只要你想
  • 使用strncpy(textRecieved, "Nothing yet", sizeof(textRecieved));,而不是memset + strcpy