0

次のコードを使用して、ハードウェア ボタンの [戻る] と [その他] のコールバックを設定します。

static void win_more_cb(void* data, Evas_Object* obj, void* event_info) {
    appdata_s* ad = data;
    if (ad->ctxpopup != NULL) evas_object_del(ad->ctxpopup);

    ad->ctxpopup = elm_ctxpopup_add(ad->win);
    elm_object_style_set(ad->ctxpopup, "more/default");

    eext_object_event_callback_add(ad->ctxpopup, EEXT_CALLBACK_BACK, _eext_ctxpopup_back_cb, NULL);
    eext_object_event_callback_add(ad->ctxpopup, EEXT_CALLBACK_MORE, _eext_ctxpopup_back_cb, NULL);
    evas_object_smart_callback_add(ad->ctxpopup, "dismissed", ctxpopup_dismissed_cb, NULL);

    elm_ctxpopup_item_append(ad->ctxpopup, "Add", NULL, ctxpopup_add_cb, NULL);

    move_more_ctxpopup(ad->ctxpopup);
    evas_object_show(ad->ctxpopup);
}

しかし、それは決して呼び出されません。

_eext_ctxpopup_back_cb注意:標準の代わりに、デバッグログを書き込んで呼び出されたかどうかを確認する、特別に作成された を使用しましたeext_ctxpopup_back_cb。私も一緒にやってみましeext_ctxpopup_back_cbた。

このコードでは、ハードウェア ボタン ([戻る] または [その他]) をタップすると、メイン ウィンドウに設定されたコールバックが呼び出されます。_eext_ctxpopup_back_cbが呼び出されることはありません。

メイン ウィンドウのコールバックを設定するコードは次のとおりです。

eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
eext_object_event_callback_add(ad->win, EEXT_CALLBACK_MORE, win_more_cb, ad);

そのため、eext_object_event_callback_add()実際には Ctxpopup のコールバックが設定されていないか、Ctxpopup が何らかの理由でイベントをEEXT_CALLBACK_BACK受信して​​いないようです。EEXT_CALLBACK_MORE

eext_object_event_callback_add()Tizen ネイティブ API のドキュメントや多くのサンプル アプリケーションで Ctxpopupの使用を確認したので、動作するはずでしたが、動作しませんでした。

ご意見をお聞かせください。

アップデート:

まだ準備ができていないアプリを Tizen デバイスにデプロイしたところ、[戻る] ボタンが機能しました! したがって、これはデバッグ環境またはエミュレーターでのものです (エミュレーターでは機能しません)。

4

1 に答える 1

0

「更新」で書いたように、これはエミュレータでのみ発生しました。実際のデバイス (Samsung Z1) では、指定されたコードでハードウェアの [戻る] ボタンが正常に機能しました。

しかし、エミュレーターでもこれを修正することができました:

ハードウェア コールバック (または) のいずれかがメイン ウィンドウ ( ) に登録されている場合、 は (後で追加した と同様に) に対してEEXT_CALLBACK_BACK呼び出されないことがわかりました。に移行するとすぐに、エミュレーターでもハードウェアの [戻る] ボタンが機能し始めました。ctxpopupnaviframeEEXT_CALLBACK_BACKEEXT_CALLBACK_MOREad->winEEXT_CALLBACK_MOREnaviframe

したがって、一般的に、これら 2 つのコールバックはメイン ウィンドウに設定すべきではないようです。そうである場合、子コンポーネントはハードウェアの Back and More イベントを受け取りません。

于 2018-07-16T13:05:35.100 に答える