ViewSwitcher中的Android WebView loadUrl加载一次

时间:2015-05-21 17:07:31

标签: android-webview android-adapter

我的ViewSwitcher中有ListViewWebView。在我的ListView的适配器中,我有一个onclick监听器,它将列表中单击的url写入sharedpreferences。我正在尝试使用onSharedPreferencesChangedListener将该网址加载到WebView中。

这是我的适配器中的代码:

convertView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        viewSwitcher.showNext();
        Settings.writeSettings(context, "webviewUrl",
                urls.get(position));
    }
});
return convertView;

在偏好倾听者中:

@Override
public void onSharedPreferenceChanged(SharedPreferences pref, String key) {
    if (key.equals("webviewUrl")) {
        Log.d("TAG", pref.getString(key, null));
        WebView wv = (WebView) findViewById(R.id.rss_webview);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.setWebViewClient(new MyWebViewClient());
        wv.loadUrl("about:blank");
        wv.loadUrl(pref.getString(key, null));
    }
}

除非只能使用一次,否则效果很好。首选项侦听器代码记录正确的URL,并且每次我想要时都会执行代码,但wv.loadUrl()方法在第一次成功调用后似乎什么都不做。任何人都可以向我解释为什么会发生这种情况并提供解决方案吗?感谢。

1 个答案:

答案 0 :(得分:0)

我通过在WebView上实现一个静态ViewHolder解决了这个问题,我需要保留比其视图生命周期更长的引用。

private static final class WebViewHolder {
    WebView wv;
}

@Override
public void onSharedPreferenceChanged(SharedPreferences pref, String key) {
    WebViewHolder holder = new WebViewHolder();
    if (key.equals("webviewUrl")) {
        if (wv == null) {
            wv = new WebView(this);
            holder.wv = (WebView) findViewById(R.id.rss_webview);
            holder.wv.getSettings().setJavaScriptEnabled(true);
            holder.wv.setWebViewClient(new MyWebViewClient());
            wv.setTag(holder);
        } else {
            holder = (WebViewHolder) wv.getTag(); 
        }
        holder.wv.loadUrl("about:blank");
        holder.wv.loadUrl(pref.getString(key, null));
    }
}