2015-03-31 2 views
0

Я пытаюсь создать приложение на гальке, используя MenuLayer. Я намерен создать меню, а затем подменю, используя MenuLayer.Iterative MenuLayer Pebble

Я выполнил некоторую базовую реализацию с использованием метода «menu_layer_set_callbacks» и зарегистрировал методы обратного вызова для каждого уровня подменю. Однако теперь я понимаю, что он становится слишком грязным.

Я хочу знать, есть ли какой-либо простой выход, предусмотренный в рамках, для удовлетворения этого требования.

Спасибо.

KK

+2

Пожалуйста, покажите нам какой-то код, поскольку он стоит на этом вопросе очень низкого качества. – Tyler

ответ

0

Я не знаю, что вы в конечном итоге с, но для моего проекта, я сделал множество подокон, но повторно одни и те же функции обратного вызова, вы можете передать пользовательские данные, чтобы позволить каждому знать, какой тип это. Затем просто надавите необходимые под окна по необходимости

void sub_window_load(Window* parentWindow) { 
    Layer* window_layer = window_get_root_layer(parentWindow); 
    const GRect bounds = layer_get_frame(window_layer); 

    MenuLayer* new_layer = menu_layer_create(bounds); 
    const int context = *((int*) window_get_user_data(parentWindow)); 

    if (context == ID_A)  s_A_layer = new_layer; 
    else if (context == ID_B) s_B_layer = new_layer; 

    menu_layer_set_callbacks(new_layer, window_get_user_data(parentWindow), (MenuLayerCallbacks){ 
    .get_num_sections = sub_menu_get_num_sections_callback, 
    .get_num_rows = sub_menu_get_num_rows_callback 
    /* etc */ 
    }); 
    menu_layer_set_click_config_onto_window(new_layer, parentWindow); 
    layer_add_child(window_layer, menu_layer_get_layer(new_layer)); 
} 

void createSubWin(Window** w, int* context) { 
    *w = window_create(); 
    window_set_user_data(*w, context); 
    window_set_window_handlers(*w, (WindowHandlers) { 
    .load = sub_window_load, 
    .unload = sub_window_unload 
    }); 
}