WebView中的goBack()几乎一直返回



(编辑:也许我应该重新表述标题,但它仍然正确地描述了行为。有时当你转到()加载的第一个URL时,它会加载,有时不会。即使我在onResume中使用loadURL()!请参阅我在问题底部附加到"活动"中的代码。)

后退按钮覆盖效果很好,可以返回到我访问过的页面。直到它应该回到从onCreate加载良好的起始URL。然后我得到了一个小延迟和一个空白页,而不是我以前看到的起始页。

有什么诀窍吗?在onCreate中多次发送具有相同URL的历史记录数组?

代码是用这个网站的答案编写的。这是整个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);
    }
}

编辑:我现在添加了这段代码,以在活动切换到时强制加载起始页,而不仅仅是在创建和返回时。这有时也不会加载起始页。

@Override受保护的void on Resume(){super.onResume();Toast.makeText(getApplicationContext(),"onResume",Toast。LENGTH_SHORT).show();mywebview.stopLoading();字符串url=share.getSubUrl()+"/sources.html";mywebview.loadUrl(url);}

每次切换到此活动时都会显示toast,但第一次才显示起始页。其他所有时间,页面都是空白的。我必须以某种方式在onPause()上"保存"mywebview吗?我只是看不出上面的代码有什么问题。

根据文档中的示例重新构建活动后,我仍然遇到了问题。而且,有时它会在几行html后停止加载,有时会在半个屏幕后停止加载。

起始页的有效CSS中的一行导致呈现中断,没有任何错误消息。该页面在同一部手机的Chrome中运行良好,这表明相比之下,WebViews的实现是不完整的。

感谢人们的回答,并对浪费的时间表示歉意。遵循标准,正确编程,让错误绊倒你,让项目产生负面利润,这太糟糕了。

如果Google开发人员想对此进行修补或至少触发一个错误,那么有问题的行是span:empty {display:none;}

最新更新