【发布时间】:2021-01-01 23:55:40
【问题描述】:
我正在使用 Cordova 和适用于 Android 的 inAppBrowser 插件
我正在尝试在 Java 文件中控制 Android 的硬件后退按钮
InAppBrowserDialog.java
public void onBackPressed() {
if (this.inAppBrowser == null) {
this.dismiss();
} else {
if (this.inAppBrowser.hardwareBack() && this.inAppBrowser.canGoBack()) {
// this.inAppBrowser.goBack();
} else {
// this.inAppBrowser.closeDialog();
}
}
}
我不希望它“goBack”或“closeDialog”,我希望它“隐藏”,就像你可以在 Cordova Javascript 端调用它一样
https://github.com/apache/cordova-plugin-inappbrowser#inappbrowserhide
ref.hide();
隐藏是理想的选择,因此我可以在不加载整个页面的情况下调用 .show,如果我只是关闭它会发生这种情况。
我正在寻找一个 Java 命令,例如
this.inAppBrowser.hide();
但我似乎找不到它。
更新
所以链接到 Codrova .hide Javascript 的 Java 代码就在这里
else if (action.equals("hide")) {
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (dialog != null && !cordova.getActivity().isFinishing()) {
dialog.hide();
}
}
});
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK);
pluginResult.setKeepCallback(true);
this.callbackContext.sendPluginResult(pluginResult);
}
我只是不知道如何从 Java 后退按钮函数中调用这个 Java 函数。
更新
JensV 提供的工作版本
所以我编辑了 InAppBrowserDialog.java
我加了
import org.apache.cordova.CordovaArgs;
import org.json.JSONArray;
并添加到里面
public class InAppBrowserDialog extends Dialog {
以下
public void hideDialog() {
CordovaArgs args = new CordovaArgs(new JSONArray());
try {
this.inAppBrowser.execute("hide", args, new FakeCallbackContext());
} catch (JSONException e) {
e.printStackTrace();
}
}
public void showDialog() {
CordovaArgs args = new CordovaArgs(new JSONArray());
try {
this.inAppBrowser.execute("show", args, new FakeCallbackContext());
} catch (JSONException e) {
e.printStackTrace();
}
}
然后我在同一目录中创建了一个新的 java 文件,名为
FakeCallbackContext.java
并在里面放了如下代码
package org.apache.cordova.inappbrowser;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.PluginResult;
class FakeCallbackContext extends CallbackContext {
public FakeCallbackContext() {
super(null, null);
}
@Override
public void sendPluginResult(PluginResult pluginResult) {
// Do not send an actual result to the webview
// Perhaps just log the result
}
}
【问题讨论】:
标签: java android cordova phonegap