1.添加支持库依赖项:在 build.gradle 文件中添加以下行以添加 SwipeRefreshLayout 支持库:
| implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' |
2.在布局文件中添加 SwipeRefreshLayout 和 WebView:
| <?xml version="1.0" encoding="utf-8"?> |
| <androidx.swiperefreshlayout.widget.SwipeRefreshLayout |
| xmlns:android="http://schemas.android.com/apk/res/android" |
| android:id="@+id/swipe_refresh_layout" |
| android:layout_width="match_parent" |
| android:layout_height="match_parent"> |
| |
| <WebView |
| android:id="@+id/webview" |
| android:layout_width="match_parent" |
| android:layout_height="match_parent"/> |
| |
| </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> |
3.缺少必要的权限:如果您的应用程序需要访问 Internet 权限,请确保在 AndroidManifest.xml 文件中添加以下行:
| <uses-permission android:name="android.permission.INTERNET" /> |
4.以下是一个完整的示例Activity代码
| import androidx.appcompat.app.AppCompatActivity; |
| import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; |
| |
| import android.os.Bundle; |
| import android.os.Handler; |
| import android.webkit.WebView; |
| import android.webkit.WebViewClient; |
| import android.widget.Toast; |
| |
| public class MainActivity extends AppCompatActivity { |
| |
| private WebView webView; |
| private SwipeRefreshLayout swipeRefreshLayout; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_main); |
| |
| webView = findViewById(R.id.webview); |
| swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout); |
| |
| |
| if (!hasInternetPermission()) { |
| Toast.makeText(this, "请授予应用程序 Internet 权限", Toast.LENGTH_SHORT).show(); |
| finish(); |
| return; |
| } |
| |
| |
| webView.getSettings().setJavaScriptEnabled(true); |
| webView.setWebViewClient(new WebViewClient() { |
| @Override |
| public void onPageFinished(WebView view, String url) { |
| swipeRefreshLayout.setRefreshing(false); |
| } |
| }); |
| webView.loadUrl("https://www.example.com"); |
| |
| |
| swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { |
| @Override |
| public void onRefresh() { |
| |
| if (webView == null) { |
| swipeRefreshLayout.setRefreshing(false); |
| return; |
| } |
| |
| new Handler().post(new Runnable() { |
| @Override |
| public void run() { |
| webView.reload(); |
| } |
| }); |
| } |
| }); |
| } |
| |
| private boolean hasInternetPermission() { |
| return checkSelfPermission(android.Manifest.permission.INTERNET) == getPackageManager().PERMISSION_GRANTED; |
| } |
| |
| @Override |
| public void onBackPressed() { |
| |
| if (webView.canGoBack()) { |
| webView.goBack(); |
| return; |
| } |
| |
| super.onBackPressed(); |
| } |
| } |
| |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~