Кнопка «Назад» в приложении Android - PullRequest
0 голосов
/ 26 октября 2011

У меня есть веб-приложение, которое работает хорошо, но я не могу заставить кнопку возврата работать в веб-представлении. Пожалуйста, смотрите код:

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;

public class extends Activity
{
    final Activity activity = this;


    WebView WebView;
    public void onCreate(Bundle savedInstanceState)

    {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setUseWideViewPort(true);


        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress)
            {
                activity.setTitle("Loading...");
                activity.setProgress(progress * 100);

                if(progress == 100)
                    activity.setTitle(R.string.app_name);
            }
        });

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String     description, String failingUrl)
            {
            // Handle the error
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }
        });

        webView.loadUrl("http://www.example.com");
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (WebView != null && (keyCode == KeyEvent.KEYCODE_BACK) && WebView.canGoBack()) {
        WebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
    }
} 

Приложение запускается, но при нажатии кнопки «Назад» оно по-прежнему выходит из приложения. Я также хочу добавить возможность использовать html mailto tag с приложением. Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Edit:

Включите нулевую проверку, чтобы увидеть, является ли WebView нулевым, прежде чем вызывать методы для него.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (WebView != null && (keyCode == KeyEvent.KEYCODE_BACK) && WebView.canGoBack()) {
    WebView.goBack();
    return true;
}
0 голосов
/ 26 октября 2011

Ваш код мне кажется правильным.Какое точное поведение вы надеетесь получить с помощью кнопки «Назад»?

Что происходит в данный момент, когда вы запускаете приложение и нажимаете кнопку «Назад»?

Редактировать, О, я вижу, что происходит.

Вы пытаетесь переопределить onKeyDown () внутри вашего onCreate ().onKeyDown () и onCreate () - оба метода Activity, поэтому вы не можете объявить одно внутри другого.

Попробуйте свой код следующим образом:

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;

public class DealJargon extends Activity {
final Activity activity = this;


    WebView WebView;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.loadUrl("http://www.example.com");
    }




        WebView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress){
                activity.setTitle("Loading...");
                activity.setProgress(progress * 100);

                if(progress == 100)
                   activity.setTitle(R.string.app_name);
            }

        });

        WebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String      description, String failingUrl){
                 // Handle the error
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){
                view.loadUrl(url);
                return true;
            }
        });


  }

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

Редактировать 2: Каждый раз, когда вы получаете некоторыеошибка компиляции, связанная с фигурной скобкой, вероятно, вы пытаетесь объявить метод внутри объявления другого метода.Или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...