Итеративное менюLayer Pebble

Я пытаюсь создать приложение на гальке с помощью MenuLayer. Мое намерение состоит в том, чтобы создать меню, а затем подменю с помощью MenuLayer.

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

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

Спасибо.

KK


person blackbug    schedule 31.03.2015    source источник
comment
Пожалуйста, покажите нам какой-нибудь код, в его нынешнем виде это вопрос очень низкого качества.   -  person Tyler    schedule 01.04.2015


Ответы (1)


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

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
  }); 
}
person Tim Martin    schedule 12.05.2015