android phonegap插件ActionBar包装器

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)

所以有几个问题:

  1. 我采用的ActionBar策略是否可行/正确?
  2. 是否可以动态更改ActionBar的内容以任意添加/删除项目?
  3. 如何从我的Java插件中调用JavaScript指定的任意回调?