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

Android Studio中跳转Activity时调用自定义SpinKit进度条的实现方法

功能实现方案

该需求完全可以实现,你当前将SpinKit封装为独立Activity的用法不合适,改用Dialog加载你编写的loadingspin.xml布局即可实现弹出效果,具体实现步骤如下:

实现逻辑

  • 点击MainActivity按钮时,创建全屏Dialog加载loadingspin.xml布局并显示
  • 跳转至Activity2,待Activity2完成所有初始化加载逻辑后,通知MainActivity关闭加载Dialog
  • 采用本地广播实现跨Activity通信,避免内存泄漏风险
  • 请提前确保你已在项目的build.gradle中添加了SpinKit组件依赖,否则布局中的自定义控件会加载报错

代码修改

1. 修改MainActivity代码

import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.app.Dialog;
import android.widget.Button;
import android.view.View;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {
    Button clickButton;
    Dialog loadingDialog;
    BroadcastReceiver dismissReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 注册关闭加载框的广播接收器,action可替换为你应用的专属标识避免冲突
        dismissReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (loadingDialog != null && loadingDialog.isShowing()) {
                    loadingDialog.dismiss();
                }
            }
        };
        registerReceiver(dismissReceiver, new IntentFilter("com.yourapp.DISMISS_LOADING"));
        
        clickButton =(Button) findViewById(R.id.buttons);
        clickButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 初始化加载Dialog
                loadingDialog = new Dialog(MainActivity.this);
                // 直接加载你编写的SpinKit布局
                loadingDialog.setContentView(R.layout.loadingspin);
                loadingDialog.setCancelable(false); // 设置点击外部不可关闭
                // 设置全屏显示
                WindowManager.LayoutParams params = loadingDialog.getWindow().getAttributes();
                params.width = WindowManager.LayoutParams.MATCH_PARENT;
                params.height = WindowManager.LayoutParams.MATCH_PARENT;
                loadingDialog.getWindow().setAttributes(params);
                // 去掉Dialog默认背景和标题
                loadingDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
                loadingDialog.getWindow().requestFeature(android.view.Window.FEATURE_NO_TITLE);
                loadingDialog.show();
                
                // 跳转至第二个Activity
                Intent intent = new Intent(MainActivity.this, Activity2.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注销广播、关闭Dialog避免内存泄漏
        if (dismissReceiver != null) {
            unregisterReceiver(dismissReceiver);
        }
        if (loadingDialog != null && loadingDialog.isShowing()) {
            loadingDialog.dismiss();
        }
    }
}

2. 编写Activity2代码

在Activity2的onCreate方法完成所有加载逻辑后,发送广播通知MainActivity关闭加载框:

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;

public class Activity2 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2); // 替换为你的第二个Activity布局
        
        // 此处写入你的Activity2加载逻辑,比如数据请求、视图初始化等
        // ========== 所有加载逻辑完成后发送广播 ==========
        sendBroadcast(new Intent("com.yourapp.DISMISS_LOADING"));
    }
}

3. 冗余代码清理

你当前编写的Spinkit.java类(继承AppCompatActivity的那个)已经不需要使用,可以直接删除,我们已经直接通过Dialog加载了loadingspin.xml布局,SpinKit的样式会正常生效,你已编写的loadingspin.xml和activity_main.xml无需修改。

效果展示

进度条示例1
进度条示例2

内容的提问来源于stack exchange,提问作者Shainnah Jane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:04