6

我在这里犯了一个大错误。我正在尝试使用 supportInvalidateOptionsMenu(); 更改操作栏菜单 但是当函数执行时,应用程序关闭,没有错误。

奇怪的是,在我的 Galaxy Nexus (4.2.2) 上一切正常,但在我朋友的手机 (android 4.0.3) 和我的 android 2.1 模拟器中都不起作用

这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
...
actionbar = getSupportActionBar();
...
myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
myWebView.loadUrl(getString(R.string.site_load));
...
}

public class WebAppInterface {
SherlockActivity mActivity;
WebAppInterface(SherlockActivity c) {mActivity = c;}  
public void setrefreshon() {showRefresh = true; mActivity.supportInvalidateOptionsMenu();}
}

有人能帮我吗?:/

4

1 回答 1

20

这很可能是线程问题。您应该会在主线程之外看到有关 UI 访问的记录错误。也许你正在过滤掉它们?查看完整的日志,而不仅仅是您的包的日志。

在 Webview 中构建 Web 应用程序

注意:绑定到 JavaScript 的对象在另一个线程中运行,而不是在构造它的线程中。

尝试:

mActivity.runOnUiThread(new Runnable(){
  @Override
  public void run(){
    mActivity.supportInvalidateOptionsMenu();
  }
});
于 2013-02-18T15:10:04.313 回答