我有一个 WebView 作为主要 Activity ,我想从另一个 Activity 的“首选项”( ListView )刷新 WebView 。可以这样做吗?我不想在应用程序菜单上有“刷新”按钮。
但是当我在我的偏好 Activity 上按下“刷新”后,该 Activity 将崩溃,我假设是“R.id.web_engine”,即来自 MainActivity 布局,导致崩溃(请查看下面的代码)。
如何从外部 Activity 执行 webview 操作?
示例:
在我的MainActivity中会有
//Webview
final WebView engine = (WebView) findViewById(R.id.web_engine);
engine.loadUrl("file:///android_asset/www/index.html");
engine.getSettings().setJavaScriptEnabled(true);
和首选项
//Get the custom preference
Preference refreshPref = (Preference) findPreference("refreshPref");
refreshPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getBaseContext(),
"Loading...",Toast.LENGTH_SHORT).show();
WebView engine = (WebView) findViewById(R.id.web_engine);
engine.loadUrl("javascript:window.location.reload();");
return true;
}
});
最佳答案
该行导致崩溃
WebView engine = (WebView) findViewById(R.id.web_engine);
engine.loadUrl("javascript:window.location.reload();");
如果我理解正确的话,这应该是一个空指针崩溃,因为这个 Preference Activity 将永远无法找到使用此方法的主要 Activity 的 WebView。更好的方法是广播一个 Intent 来刷新并在主 Activity 中处理该 Intent 并执行操作。
在此处查看有关广播接收器的详细信息 http://thinkandroid.wordpress.com/2010/02/02/custom-intents-and-broadcasting-with-receivers/
关于java - 从另一个 ListView Activity 执行 webview 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7550609/