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
]);
};
いくつかの質問:
- 私が採用しているActionBar戦略は実行可能/正しいですか?
- ActionBar の内容を動的に変更して、項目を任意に追加/削除することは可能ですか?
- Java プラグインから JavaScript で指定された任意のコールバックを呼び出すにはどうすればよいですか?