Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

在Android开发中,我们常常需要在加载数据时显示一个loading对话框来提示用户进行等待,本篇文章将介绍如何在不退出沉浸式效果的情况下,在Android应用程序中实现loading对话框的功能。

一、基本思路

要实现loading对话框的功能,我们需要完成以下步骤:

  1. 在布局文件中添加一个ProgressBar组件或其他的加载提示组件。

  2. 在Java代码中,编写显示或隐藏加载提示对话框的代码。

二、实现过程

1. 在布局文件中添加一个ProgressBar组件。

我们可以在布局文件中添加一个ProgressBar组件,用它来显示加载提示信息。这里以ProgressBar组件为例,其它加载提示组件也可以类似实现。

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:indeterminate="true"
    android:visibility="gone" />

设置属性android:visibility="gone"来隐藏ProgressBar,待程序需要显示时,再使用Java代码来设置其可见。

2. 编写Java代码

我们创建一个叫Utils的类,其中编写showProgressDialog和hideProgressDialog方法用于显示和隐藏加载提示框。这里使用ProgressDialog组件进行演示。

public class Utils {

    private static ProgressDialog progressDialog;

    /**
     * 显示加载对话框
     *
     * @param context 上下文对象
     * @param message 显示信息
     */
    public static void showProgressDialog(Context context, String message) {
        if (progressDialog == null) {
            progressDialog = new ProgressDialog(context);
            progressDialog.setCancelable(false);
            progressDialog.setMessage(message);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        }
        progressDialog.show();
    }

    /**
     * 隐藏加载对话框
     */
    public static void hideProgressDialog() {
        if (progressDialog != null) {
            progressDialog.dismiss();
            progressDialog = null;
        }
    }
}

在需要显示加载提示框的地方,直接调用Utils.showProgressDialog(context, message);在需要隐藏加载提示框的地方,直接调用Utils.hideProgressDialog()即可。

三、示例

示例1

在用户登录的过程中,通常需要进行网络请求,请求完成之前需要显示加载提示框,请求完成则隐藏提示框。示例代码如下:

public void login() {
    Utils.showProgressDialog(context, "登录中,请稍候...");
    // 发送登录请求
    Request request = new Request.Builder()
            .url("login url")
            .build();
    OkHttpClient client = new OkHttpClient();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NonNull Call call, @NonNull IOException e) {
            e.printStackTrace();
            Utils.hideProgressDialog();
        }

        @Override
        public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
            Utils.hideProgressDialog();
            if (response.isSuccessful()) {
                // 登录成功后的逻辑处理
            } else {
                // 登录失败后的逻辑处理
            }
        }
    });
}

示例2

在使用RecyclerView显示数据的过程中,当数据量较大时,需要先进行加载,加载完成之前,需要显示加载提示框,示例代码如下:

public class RecyclerActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private List<String> data;

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

        recyclerView = findViewById(R.id.recyclerView);

        Utils.showProgressDialog(this, "数据加载中,请稍候...");
        loadData();
    }

    private void loadData() {
        // 网络获取数据
        Request request = new Request.Builder()
                .url("data url")
                .build();
        OkHttpClient client = new OkHttpClient();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseString = response.body().string();
                    // 解析数据
                    data = parseData(responseString);

                    // 切换到主线程更新UI
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // 设置RecyclerView的布局管理器、适配器等
                            recyclerView.setLayoutManager(new LinearLayoutManager(RecyclerActivity.this));
                            recyclerView.setAdapter(new MyAdapter(data));
                            Utils.hideProgressDialog();
                        }
                    });
                } else {
                    // 数据加载失败的处理
                }
            }
        });
    }

    private List<String> parseData(String responseString) {
        // 省略解析代码,返回数据列表
        return new ArrayList<>();
    }
}

四、总结

通过以上步骤,我们就可以在Android应用程序中实现loading对话框的功能,并在数据加载或网络请求等操作的过程中显示加载提示信息。注意在使用沉浸式效果时,不能直接使用ProgressDialog,否则会退出沉浸式效果,需要使用其他加载提示组件来替代ProgressDialog。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android加载loading对话框的功能及实例代码(不退出沉浸式效果) - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Android listview多视图嵌套多视图

    Android ListView多视图嵌套多视图攻略 在Android开发中,我们经常需要在ListView中展示不同类型的视图。有时候,我们还需要在其中的某些视图中再次嵌套其他视图。本攻略将详细介绍如何实现\”Android ListView多视图嵌套多视图\”的功能。 步骤一:创建自定义适配器 首先,我们需要创建一个自定义适配器来管理ListView中的…

    other 2023年7月28日
    00
  • 基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

    基于MVC+EasyUI的Web开发框架使用C-Lodop打印控件打印页面或套打报关运单信息 1. 简介 C-Lodop是一款免费的打印控件,可以实现Web页面的高级打印功能和套打功能。在MVC+EasyUI的Web开发框架中使用C-Lodop可以实现打印发票、报告、运单和标签等功能,是Web开发常用的技术之一。 2. 安装C-Lodop 首先需要到官网(h…

    other 2023年6月27日
    00
  • js判断ie版本号的简单实现代码

    当需要在JavaScript中判断Internet Explorer(IE)的版本号时,可以使用以下简单的实现代码: // 判断IE版本号的函数 function getIEVersion() { var userAgent = window.navigator.userAgent; var msie = userAgent.indexOf(‘MSIE ‘)…

    other 2023年8月3日
    00
  • 11.Vray渲染常见问题及解决方案

    Vray渲染常见问题及解决方案 1. 概述 在使用Vray进行渲染时,难免会遇到一些问题,比如渲染速度慢、渲染出现噪点等。本文将就Vray渲染中的常见问题进行详细的解答,帮助Vray渲染用户更加顺利地进行渲染。 2. 渲染速度慢 2.1 问题描述 在使用Vray进行渲染时,发现渲染速度非常慢,在等待时间过长的情况下无法高效地工作。 2.2 解决方案 使用适当…

    other 2023年6月26日
    00
  • golang websocket 服务端的实现

    下面是关于”golang websocket 服务端的实现”的攻略。 准备工作 首先,我们需要在Go中引入websocket包,可以通过如下方式: import "github.com/gorilla/websocket" 同时,我们还需要处理websocket的请求,这样才能确保服务端收到请求并进行处理,可以使用http.HandleF…

    other 2023年6月27日
    00
  • js深拷贝与浅拷贝一文彻底搞懂

    JS深拷贝与浅拷贝一文彻底搞懂 什么是深拷贝与浅拷贝 在JavaScript中,由于对象和数组是通过引用传递的,所以需要特别注意拷贝的方式。拷贝的方式可以分为两种:深拷贝和浅拷贝。 深拷贝会复制一个对象或数组,包括其所有的嵌套属性和子元素,而浅拷贝只是复制了对象或数组本身,并没有复制嵌套的属性或子元素。 深拷贝 以下是一种常见的深拷贝方法,通过递归函数来实现…

    other 2023年6月27日
    00
  • asp.net DZ论坛中根据IP地址取得所在地的代码

    ASP.NET DZ论坛中根据IP地址取得所在地的代码攻略 1. 获取IP地址 首先,我们需要获取用户的IP地址。在ASP.NET中,可以通过Request.UserHostAddress属性来获取用户的IP地址。以下是获取IP地址的示例代码: string ipAddress = Request.UserHostAddress; 2. 使用IP地址查询服务…

    other 2023年7月30日
    00
  • 请问如何查询一个app的android和ios下载量?

    要查询一个App的Android和iOS下载量,需要分别通过Google Play和App Store进行查询。具体步骤如下: 在Google Play查询Android下载量 打开Google Play网站或应用,搜索要查询的App,进入App页面。 在App页面向下滑动,查看页面底部的下载量信息。如果没有直接显示下载量信息,可以点击“Install”按钮…

    其他 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部