5

我正在尝试使用 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
    ]);
};     

所以几个问题:

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

0 回答 0