我正在尝试使用 android 本机控件向我的 PhoneGap 应用程序添加 iOS“TabBar”样式导航 - 所以 ActionBar。我希望我的 JavaScript 在选项卡更改时接收回调,理想情况下,我希望 ActionBar 也完全由 JavaScript 动态填充(如 PhoneGap 中的 iOS Native TabBar)。我知道我可以在 JS/CSS/HTML 层中做到这一点,但在我这样做之前我想认真地使用本机控件。
通过修改 onCreate 以包含以下内容,我已成功将 ActionBar 添加到我的 android phonegap 应用程序中:
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 指定的任意回调?