Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách hiển thị ProgressDialog trước khi bắt đầu Activity trong Android

Giới thiệu

Ví dụ này minh họa cách hiển thị hộp thoại tiến trình (ProgressDialog) trước khi chuyển sang Activity khác hoặc thực hiện tác vụ nền. Lưu ý: ProgressDialog đã bị deprecated từ API 26, nên sử dụng ProgressBar trong layout hoặc thư viện như MaterialProgressBar cho ứng dụng hiện đại.

Các bước thực hiện (Cách cũ - deprecated)

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="4dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="Hiển thị ProgressDialog trước khi bắt đầu Activity..."
        android:textSize="24sp"
        android:textStyle="bold" />

</LinearLayout>

Bước 3: Viết code logic (src/MainActivity.java)

import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    ProgressDialog progressDialog;

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

        progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Đang tải nội dung");
        progressDialog.setProgress(10);
        progressDialog.setMax(100);
        progressDialog.setMessage("Đang tải...");
        new MyTask().execute();
    }

    public class MyTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... unused) {
            // Giả lập tác vụ nền (network, database, v.v.)
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
            // Chuyển Activity hoặc cập nhật UI tại đây
        }
    }
}

Bước 4: Cấu hình Manifest (androidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. ProgressDialog sẽ hiển thị trong 3 giây rồi tự đóng.

Cách hiển thị ProgressDialog trước khi bắt đầu Activity trong Android

Cách hiện đại (Khuyến nghị)

Thay vì ProgressDialog, hãy dùng ProgressBar trong layout XML:

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:visibility="gone" />

Trong code: progressBar.setVisibility(View.VISIBLE) khi bắt đầu tác vụ, và View.GONE khi xong. Kết hợp với ViewBinding hoặc DataBinding để code sạch hơn.