1

我已经尝试了很多事情,并且在我的 Android 应用程序上不断收到崩溃错误。我的应用程序是一个使用 webview 功能的简单 webwrapper 应用程序。基本上,我有 webview 显示一个有移动网站的网站。我想做的是让它

  1. 后退按钮将带用户返回上一个屏幕
  2. 应用程序上的后退按钮(我放在布局中)也会将用户带到上一个屏幕。
  3. 我还希望手机上的主页按钮返回主屏幕并完全退出应用程序。
  4. 最后,移动应用程序的外部链接应该进入浏览器而不是留在应用程序中(例如:访问完整站点)。

以下是我的代码,任何对 1-4 个问题的帮助都会有所帮助!:-)!如果您需要查看我的 XML,请不要犹豫。

package com.example.envision;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;

public class Envision extends Activity {
/** back button functionality NOT WORKING CAUSES A CRASH
WebView webview;
@Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN) {
            switch(keyCode)
            {
            case KeyEvent.KEYCODE_BACK:
                if(webview.canGoBack() == true){
                    webview.goBack();
                } else {
                    finish();
                }
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    } */

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_envision);

WebView webview = (WebView) findViewById(R.id.webView1);

WebSettings websettings = webview.getSettings();

websettings.setJavaScriptEnabled(true);
websettings.setSaveFormData(false);
websettings.setSavePassword(false);

webview.loadUrl("http://envisionfinancial.ca/m/");
webview.setHorizontalScrollBarEnabled(false);
webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setBackgroundColor(128);

webview.setWebViewClient(new EnvisionWebViewClient());

webview.setDownloadListener(new DownloadListener() {
    public void onDownloadStart(String url, String userAgent,
            String contentDisposition, String mimetype,
            long contentLength) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(url));
        startActivity(intent);
        }


});

}

public void visible(){

WebView webview = (WebView) findViewById(R.id.webView1);

ImageView logo = (ImageView) findViewById(R.id.imageView1);

ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);

webview.setVisibility(10);

logo.setVisibility(0);

bar.setVisibility(0);

}

public void unvisible(){

WebView webview = (WebView) findViewById(R.id.webView1);

ImageView logo = (ImageView) findViewById(R.id.imageView1);

ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);

webview.setVisibility(0);

logo.setVisibility(10);

bar.setVisibility(10);

}


private class EnvisionWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url){
    webview.loadUrl(url);
    return true;
}


@Override
public void onReceivedError(WebView view, int errorCode,
    String description, String failingUrl) {
// TODO Auto-generated method stub
view.loadUrl("http://envisionfinancial.ca/m/");
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

visible();

}

@Override
public void onPageFinished(WebView view, String url) {

unvisible();

}

}
/** exits the app?? review */
public void finishActivity(View v) {
finish();

}
}
4

2 回答 2

0

您是否在 onKeyDown 中收到 NullPointerException?那是因为您没有将 WebView 分配给实例变量:

webview = (WebView) findViewById(R.id.webView1);

后退功能可以这样实现:

public void onBackPressed() {
    if (webview.canGoBack())
        webview.goBack();
    else
        super.onBackPressed();
}
于 2012-11-18T20:05:37.523 回答
0

看到这个:http: //developer.android.com/guide/webapps/webview.html

滚动到Binding JavaScript code to Android code

http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String)

于 2012-11-18T19:57:00.570 回答