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

点击按钮后显示ProgressBar 5秒再显示TextView的Java实现

没问题,我来帮你搞定这个需求!下面是完整的实现方案,包括布局和Java代码,还有关键细节的说明:

1. 编写布局文件(res/layout/activity_main.xml)

先把需要的控件都放进去,记得给ProgressBar和TextView默认设置invisible状态:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:gap="16dp">

    <!-- 输入框 -->
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入内容"/>

    <!-- 触发按钮 -->
    <Button
        android:id="@+id/actionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始执行"/>

    <!-- 进度条,默认隐藏 -->
    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:layout_gravity="center_horizontal"/>

    <!-- 结果文本,默认隐藏 -->
    <TextView
        android:id="@+id/resultText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="操作完成!"
        android:visibility="invisible"
        android:layout_gravity="center_horizontal"
        android:textSize="18sp"/>

</LinearLayout>
2. Java逻辑代码(MainActivity.java)

这里实现点击按钮后的核心逻辑,重点是用Handler处理延迟任务,同时注意避免内存泄漏:

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private ProgressBar progressBar;
    private TextView resultText;
    private Button actionButton;

    // 用静态内部类Handler避免内存泄漏
    private static class MyHandler extends Handler {
        private final MainActivity activity;

        MyHandler(MainActivity activity) {
            this.activity = activity;
        }

        @Override
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 1) {
                // 5秒后切换控件状态
                activity.progressBar.setVisibility(View.INVISIBLE);
                activity.resultText.setVisibility(View.VISIBLE);
                // 恢复按钮可点击状态,防止重复触发
                activity.actionButton.setEnabled(true);
            }
        }
    }

    private final MyHandler handler = new MyHandler(this);

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

        // 初始化控件
        progressBar = findViewById(R.id.progressBar);
        resultText = findViewById(R.id.resultText);
        actionButton = findViewById(R.id.actionButton);

        // 设置按钮点击事件
        actionButton.setOnClickListener(v -> {
            // 点击后先禁用按钮,避免重复操作
            actionButton.setEnabled(false);
            // 隐藏之前可能显示的文本
            resultText.setVisibility(View.INVISIBLE);
            // 显示进度条
            progressBar.setVisibility(View.VISIBLE);

            // 延迟5秒执行后续操作(5000毫秒=5秒)
            handler.sendEmptyMessageDelayed(1, 5000);
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 移除所有未执行的回调,彻底避免内存泄漏
        handler.removeCallbacksAndMessages(null);
    }
}
关键细节说明
  • 禁用按钮:点击后先把按钮设为不可用,防止用户重复点击触发多次延迟任务
  • 内存泄漏防护:用静态内部类Handler+onDestroy移除回调,避免Activity销毁后还被引用
  • 状态重置:每次点击都先隐藏TextView,确保重新执行时界面状态正确

补充:用CountDownTimer实现(可选)

如果觉得Handler的方式不够直观,也可以用Android自带的CountDownTimer,代码可读性更强:

// 替换按钮点击事件里的延迟部分
new CountDownTimer(5000, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        // 要是用的是横向进度条,还能在这里实时更新进度
    }

    @Override
    public void onFinish() {
        progressBar.setVisibility(View.INVISIBLE);
        resultText.setVisibility(View.VISIBLE);
        actionButton.setEnabled(true);
    }
}.start();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:24:20