5

Android ネイティブ コントロールを使用して iOS の「TabBar」スタイルのナビゲーションを追加しようとしています。つまり、ActionBar を PhoneGap アプリケーションに追加しようとしています。タブが変更されたときに JavaScript がコールバックを受け取るようにしたいのですが、理想的には、ActionBar も JavaScript によって完全に動的に読み込まれるようにしたいと考えています (PhoneGap の iOS ネイティブ TabBar のように)。JS/CSS/HTML レイヤーでこれを行うことができることはわかっていますが、それを行う前に、ネイティブ コントロールを真剣に使用したいと考えています。

以下を含むように onCreate を変更することで、Android phonegap アプリに ActionBar を正常に追加しました。

public void onCreate(Bundle savedInstanceState) {
    this.setBooleanProperty("showTitle", true);

    super.onCreate(savedInstanceState);

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

    ActionBar bar = getActionBar();

    bar.setDisplayShowTitleEnabled(false); 
    bar.setDisplayShowHomeEnabled(false);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab = bar.newTab()
        .setText("Test")
        .setTabListener(new TestListener());

    bar.addTab(tab);
    bar.show();

    super.loadUrl("file:///android_asset/www/index.html");
}

iOS NativeControls メカニズムと非常によく似たものを使用して、プラグインを作成することで、これをよりきれいにしようとしています。

public PluginResult execute(String action, JSONArray data, String callbackId) {
    PluginResult.Status status = PluginResult.Status.OK;
    String result = "";

    if(INIT.equals(action)) {
        ActionBar bar = cordova.getActivity().getActionBar();
        Tab tab = bar.newTab()
            .setText("Test")
            .setTabListener(new TestListener());

        // CRASHES HERE
        bar.addTab(tab);
        bar.show();
    }

    return new PluginResult(status, result);
}

onCreate 中に ActionBar をセットアップする必要があるため、これは非スターターであることを理解しています。それで、作成をonCreateに残して、タブがクリックされたときにヒットするようにJavaScriptにコールバックを設定させようとしていましたが、JavaからJavaScriptに任意のコールバックを実際に呼び出す方法がわかりません-いつでも。keepCallback 関数を使用して、「成功」コールバックで問題なく実行できます。次のように、Java への引数として指定されたコールバックである必要があります。

MyActionBar.prototype.setCallback = function(tabIndex, callback) {
    cordova.exec(function () {
            console.log("Set callback succeeded");
    },              
    function() {
            console.log("SetCallback failed");
    },              
    "MyActionBar",
    "setCallback", [tabIndex, callback // <--- Calls THIS callback on click
    ]);
};     

いくつかの質問:

  1. 私が採用しているActionBar戦略は実行可能/正しいですか?
  2. ActionBar の内容を動的に変更して、項目を任意に追加/削除することは可能ですか?
  3. Java プラグインから JavaScript で指定された任意のコールバックを呼び出すにはどうすればよいですか?
4

0 に答える 0