2013-12-06 3 views
0

Я пытаюсь использовать этот код (от here):дисплей WebView неправильно содержания после добавления в FrameLayout

public class StatePreservingImplActivity extends Activity { 
    protected FrameLayout webViewPlaceholder; 
    protected WebView webView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.state_preserving_impl); 

    // Initialize the UI 
    initUI(); 
    } 

    protected void initUI() { 
    // Retrieve UI elements 
    webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder)); 

    // Initialize the WebView if necessary 
    if (webView == null) { 
     // Create the webview 
     webView = new WebView(this); 
     webView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
     webView.getSettings().setSupportZoom(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webView.setScrollbarFadingEnabled(true); 
     webView.getSettings().setLoadsImagesAutomatically(true); 

     // Load the URLs inside the WebView, not in the external web browser 
     webView.setWebViewClient(new WebViewClient()); 

     // Load a page 

    } 
    //ATTENTION 
    webView.loadUrl("http://MYPAGE.php"); 
    // Attach the WebView to its placeholder 
    webViewPlaceholder.addView(webView); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
    if (webView != null) { 
     // Remove the WebView from the old placeholder 
     webViewPlaceholder.removeView(webView); 
    } 

    super.onConfigurationChanged(newConfig); 

    // Load the layout resource for the new configuration 
    setContentView(R.layout.state_preserving_impl); 

    // Reinitialize the UI 
    initUI(); 
    } 

В вебе зрении я пытаюсь отобразить страницу, которая вычисление размера контента с помощью JavaScript и окна .innerWidth/высота. После запуска приложения все в порядке. Но если я поворачиваю дисплей (на эмуляторе через NumPad 7 или 9), содержимое веб-дисплея для старых значений window.innerWidth/height, несмотря на то, что webView перезагружен URL (см. // ВНИМАНИЕ). Если я вращаю устройство 2 или 3 или 4 или более раз, он всегда использует значения, которые раньше соответствовали состоянию.

Исследование было так долго, но я подозреваю, что в этой строке

webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder)); 

я стареть экземпляр FrameLayout, потому что новый формат не было времени, чтобы закончить загрузку. И я до сих пор не понимаю, как в этом примере кода WebView передает правильные значения ширины и высоты JavaScript, прежде чем он будет связан с FrameLayout после запуска приложения.

Я пытался найти решение, но не имел успеха. Я буду рад за любую помощь.

P.S. извините за свои знания английского языка.

ответ

0

Проблема решена. Прежде всего, я нахожу onContentChanged() событие и перемещение initUI(); от OnConfigurationChanged (..) к нему. Затем отключите кеш, и он работает нормально. Вот код, который я изменил:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    if (mapWebView != null) { 
    // Remove the WebView from the old placeholder 
     webViewPlaceholder.removeView(mapWebView); 
     webView.clearView(); 
    } 

     super.onConfigurationChanged(newConfig); 
     // Load the layout resource for the new configuration 
     setContentView(R.layout.web_view_layout1); 
} 


@Override 
public void onContentChanged() { 
    super.onContentChanged(); 
    initUI(); 
} 
Смежные вопросы