ami*_*rpc 5 java mobile android phonegap-plugins cordova
我正在尝试使用Android原生控件添加iOS"TabBar"样式导航 - 所以ActionBar - 到我的PhoneGap应用程序.我希望我的JavaScript在更改选项卡时接收回调,理想情况下我也希望ActionBar完全由JavaScript动态填充(如PhoneGap中的iOS Native TabBar).我知道我可以在JS/CSS/HTML层中做到这一点,但我想在我这样做之前认真使用本机控件.
我已成功将ActionBar添加到我的android phonegap应用程序中,方法是修改onCreate以包含:
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");
}
Run Code Online (Sandbox Code Playgroud)
我一直试图通过创建一个插件来使这个更漂亮,使用非常类似于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);
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个非首发因素,因为必须在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
]);
};
Run Code Online (Sandbox Code Playgroud)
所以有几个问题: