You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView应用报错:找不到onBackPressed()方法,求协助解决

解决Android WebView应用中cannot find symbol: method onBackPressed()错误

错误原因

你把onBackPressed()方法错误地定义在了myWebClient内部类中——这个类继承自WebViewClient,而WebViewClient根本没有onBackPressed()方法,所以调用super.onBackPressed()时编译器找不到对应方法,抛出错误。另外,onBackPressed()是Android Activity的生命周期方法,本就应该属于MainActivity,而非WebViewClient的子类。

修正步骤及代码

  1. 将onBackPressed()方法从myWebClient中移到MainActivity类下,作为Activity的重写方法。
  2. 移除myWebClient中无效的implements com.example.balkanconta.myWebClient声明(这会导致循环依赖,完全没必要)。
  3. 清理onCreate中重复的findViewById调用,确保WebView实例只初始化一次。
  4. 让WebView使用自定义的myWebClient实例,而非默认的WebViewClient。

修正后的完整代码:

package com.example.balkanconta;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView myWebview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 仅初始化一次WebView实例
        myWebview = findViewById(R.id.webview);
        // 使用自定义的WebViewClient
        myWebview.setWebViewClient(new myWebClient());
        myWebview.loadUrl("https://example.com/");
        WebSettings webSettings = myWebview.getSettings();
        webSettings.setJavaScriptEnabled(true);
    }

    // 重写Activity的返回键处理方法
    @Override
    public void onBackPressed() {
        if (myWebview != null && myWebview.canGoBack()) {
            // WebView可返回时,返回上一页
            myWebview.goBack();
        } else {
            // 无页面可返回时,执行默认的返回逻辑
            super.onBackPressed();
        }
    }

    // 自定义WebViewClient,处理页面加载逻辑
    public class myWebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

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

关键说明

  • 只有Activity类才有onBackPressed()方法,所以必须将其放在MainActivity中并添加@Override注解,表示重写父类方法。
  • 自定义WebViewClient时,不要实现自身类,这是典型的错误写法,会导致编译问题。
  • 确保WebView绑定的是自定义的myWebClient,否则你的页面加载逻辑不会生效。

内容的提问来源于stack exchange,提问作者Bogdan Tudor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:55:15