2013-12-05 3 views
1

(EDIT: Возможно, мне нужно перефразировать заголовок, но он по-прежнему описывает поведение правильно. Иногда, когда вы используете goBack() для первого URL-адреса, он загружается, а иногда и не работает, т. Даже если я сделаю это с loadURL() в onResume! См. код, который я добавил к Activity в нижней части вопроса.)goBack() в WebView возвращается в полном объеме

Задняя кнопка кнопки работает хорошо и возвращается через страницы, которые я посетил , Пока он не вернется к стартовому URL, который загружается отлично от onCreate. Затем я получаю небольшую задержку и пустую страницу, а не начальную страницу, которую я видел раньше.

Есть ли какой-нибудь трюк? Спам нескольких массивов истории с одним и тем же URL более одного раза в onCreate?

Код написан на основе ответов с этого сайта. Это весь java-файл.

package se.avia.tdca; 

import se.avia.tdca.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 
import android.view.KeyEvent; 

public class Inspiration extends Activity { 
    Sharedprefs share; 
    WebView mywebview; 

    @Override 
    public void onBackPressed(){ //for < 4 

     if (mywebview.canGoBack()) { 
      mywebview.goBack(); 
      mywebview.reload(); //desperate try 
      return; 
     } 
     super.onBackPressed();  
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) { 
      mywebview.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.inspiration); 

     share=new Sharedprefs(this); 

     mywebview = (WebView) findViewById(R.id.inspiration_webview); 

     String url = share.getSubUrl()+"/sources.html"; 

     mywebview.getSettings().setJavaScriptEnabled(true); 
     mywebview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); //desperate try 
     final Activity activity = this; 
     mywebview.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       // Activities and WebViews measure progress with different 
       // scales. 
       // The progress meter will automatically disappear when we reach 
       // 100% 
       activity.setProgress(progress * 1000); 
      } 
     }); 
     mywebview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, 
        String description, String failingUrl) { 
       Toast.makeText(activity, "Error loading Suppliers list: " + description, 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     mywebview.loadUrl(url); 

    } 
} 

Edit: Я теперь добавил этот код, чтобы заставить загрузить начальную страницу, когда активность переключается, а не только тогда, когда он создан и когда вы вернетесь. Эта ТАКЖЕ иногда не загружает стартовую страницу.

@Override protected void onResume() { super.onResume(); Toast.makeText (getApplicationContext(), "onResume", Toast.LENGTH_SHORT) .show(); mywebview.stopLoading(); String url = share.getSubUrl() + "/ sources.html"; mywebview.loadUrl (url); }

Тост отображается каждый раз, когда я переключаюсь на это действие, но стартовая страница только в первый раз. В остальное время страница пуста. Должен ли я «сохранить» mywebview как-то на onPause()? Я просто не вижу ничего плохого в этом коде.

+1

почему вам нужно сделать webView.goBack() inonbackpressed() и OnKeyDown() оба метода? – afadfadf

+0

удален наKeyDown (даже если вы не указали, какой из них или что с ним возникла), все тот же. –

+0

Это проблема только со стартовой страницей? goback() с других страниц работает нормально? – afadfadf

ответ

2

После перестройки активности из примера в документах у меня все еще возникла проблема. А также, иногда это прекращает загрузку после нескольких строк html, а иногда и после половины экрана.

Одна строка в действительном CSS для начальной страницы заставляла рендеринг прерываться без сообщения об ошибке. Эта страница отлично работала в Chrome на том же телефоне, что указывает на то, что реализация WebView не является неполной в сравнении.

Спасибо людям, которые отвечают и жаль, что потрачено время. Слишком плохо следовать стандартам, правильно программировать, и у вас есть проблемы с ошибками и сделать проект отрицательно выгодным.

Если разработчики Google хотят, чтобы исправить это или, по крайней мере, вызвать ошибку, обижая линия была span:empty {display:none;}

Смежные вопросы