点击SELECT项时,WebView会因BadTokenException而崩溃

时间:2016-01-21 09:42:34

标签: android android-activity webview

我(我想)我遇到与此SO以及此SO中描述的问题相同的问题:

我在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时,我该怎么做以及在哪里做?

0 个答案:

没有答案