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

Android WebView应用SwipeRefreshLayout刷新跳转首页问题求助

问题根源分析

你的问题出在下拉刷新时调用的LoadWeb()方法硬编码了Home页面的URL,不管当前WebView显示的是哪个页面,每次刷新都会强制加载Home页面,所以才会出现Candidate List页面刷新后跳回Home的情况。

另外,你的LoadWeb()方法每次都会重新获取WebView实例并重复配置WebSettings,这不仅冗余,还可能导致不必要的问题。

解决方案

我们需要保存当前WebView正在加载的URL,下拉刷新时重新加载这个保存的URL,而不是固定的Home地址。同时优化WebView的初始化逻辑,只做一次配置。

步骤1:添加成员变量保存当前URL

在navigation类中添加一个私有成员变量,用来记录当前WebView加载的URL:

public class navigation extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    WebView webView;
    SwipeRefreshLayout swipeRefreshLayout;
    private AdView mAdView;
    final String TAG = this.getClass().getName();
    // 添加这行,保存当前URL
    private String currentUrl;
    // ...其余代码...
}

步骤2:优化WebView初始化逻辑

把WebView的配置和初始化移到onCreate()方法中,只执行一次,避免重复操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_navigation);

    // ...Toolbar、DrawerLayout等初始化代码...

    // 初始化WebView并配置参数(只做一次)
    webView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    webSettings.setAppCacheEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    webSettings.setUseWideViewPort(true);
    webSettings.setSavePassword(true);
    webSettings.setEnableSmoothTransition(true);
    webSettings.setJavaScriptEnabled(true);

    // 设置下载监听
    webView.setDownloadListener(new DownloadListener() {
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);
        }
    });

    // 设置WebViewClient,页面加载完成后更新当前URL并停止刷新
    webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            swipeRefreshLayout.setRefreshing(false);
            // 更新当前URL,处理网页内部跳转的情况
            currentUrl = url;
        }
    });

    // 初始化下拉刷新监听
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe);
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            LoadWeb();
        }
    });

    // 设置初始URL为Home页面
    currentUrl = "http://www.gujaratuniversity.ac.in/web/";
    LoadWeb();

    // ...广告初始化代码...
}

步骤3:修改LoadWeb()方法

让它加载保存的currentUrl,而不是硬编码的Home地址:

public void LoadWeb(){
    // 检查URL和WebView是否有效
    if(currentUrl != null && webView != null){
        webView.loadUrl(currentUrl);
    }
}

步骤4:更新导航菜单点击事件

每次切换页面时,更新currentUrl的值:

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/";
        webView.loadUrl(currentUrl);
        setTitle("Home");
    } else if (id == R.id.nav_result) {
        currentUrl = "http://result.gujaratuniversity.ac.in/";
        webView.loadUrl(currentUrl);
        setTitle("Result");
    } else if (id == R.id.nav_examschedule) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/custom/student/examination-schedule";
        webView.loadUrl(currentUrl);
        setTitle("Exam Schedule");
    } else if (id == R.id.nav_seatingarrangement) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/custom/student/seating-arrangement";
        webView.loadUrl(currentUrl);
        setTitle("Seating Arrangement");
    } else if (id == R.id.nav_candidate) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/custom/student/candidate-list";
        webView.loadUrl(currentUrl);
        setTitle("Candidate List");
    } else if (id == R.id.nav_oldquestionpapers) {
        currentUrl = "http://sampada.inflibnet.ac.in/";
        webView.loadUrl(currentUrl);
        setTitle("Old Question Papers");
    } else if (id == R.id.nav_syllabus) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/custom/student/syllabus";
        webView.loadUrl(currentUrl);
        setTitle("Syllabus");
    } else if (id == R.id.nav_antiragging) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/custom/pdfs/anti-ragging";
        webView.loadUrl(currentUrl);
        setTitle("Anti Ragging");
    } else if (id == R.id.nav_about) {
        currentUrl = "http://www.gujaratuniversity.ac.in/web/page/overview";
        webView.loadUrl(currentUrl);
        setTitle("About");
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
为什么这样修改?
  1. 保存当前URL:确保下拉刷新时加载的是用户当前浏览的页面,而不是默认的Home页面。
  2. WebView只初始化一次:避免重复调用findViewById和重复配置WebSettings,提升性能并减少潜在问题。
  3. 监听页面跳转:在onPageFinished中更新currentUrl,即使用户在页面内部点击链接跳转,刷新也能停留在跳转后的页面。

内容的提问来源于stack exchange,提问作者Abhishek Diwakar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:36