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无需修改。
效果展示


内容的提问来源于stack exchange,提问作者Shainnah Jane
相关产品推荐
相关产品推荐

