我在TabGroupActivity中有一个WebView。当我加载一个包含SELECT元素的远程URL,然后点击它时,它在运行Android 4.1.2的Nexus S上崩溃了(我在5.1.1和Nexus上运行三星Galaxy S2的用户阅读相同的报告5月6.0.0)。
例外是:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@4160b960 is not valid; is your activity running?
这是结构:
// MobileWebTab.java
public class MobileWebTab extends TabGroupActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startChildActivity("Mobile_Activity", new Intent(this,Mobile_Web_Activity.class));
}
}
// Mobile_Web_Activity.java
public class Mobile_Web_Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mobile_web);
}
}
// MobileWebView.java
public class MobileWebView extends RelativeLayout {
Context _context;
private void initializeView(Context context){
_context=context;
LayoutInflater layoutInflater = LayoutInflater.from(context);
layoutInflater.inflate(R.layout.layout_mobile_site, this);
WebView mWebview = (WebView)findViewById(R.id.ww_mobile_site);
mWebview.setWebViewClient(new WebViewClient() {
//If you will not use this method url links are opeen in new brower not in webview
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript
mWebview.loadUrl(Constants.app_mobile_site);
}
public MobileWebView(Context context) {
super(context);
initializeView(context);
}
public MobileWebView(Context context, AttributeSet attrs) {
super(context, attrs);
initializeView(context);
}
public MobileWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initializeView(context);
}
}
两个答案都建议设置WebView的父活动上下文 - 但是当通过XML定义WebView时,我该怎么做以及在哪里做?