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

Cách lấy tên Activity hiện tại trên Android

Giới thiệu

Bài viết hướng dẫn các cách lấy tên class của Activity hiện tại: tên đơn giản (Simple name) hoặc tên đầy đủ (Fully qualified name).

Các phương pháp

Phương pháp 1: getClass().getSimpleName() - Khuyên dùng

val simpleName = this::class.java.simpleName
// Kết quả: "MainActivity"

Phương pháp 2: getClass().getName() - Tên đầy đủ

val fullName = this::class.java.name
// Kết quả: "com.example.myapp.MainActivity"

Phương pháp 3: Java style

// Java
String simpleName = getClass().getSimpleName();
String fullName = getClass().getName();

Phương pháp 4: Từ Context (bất kỳ đâu có Context)

val activityName = context.javaClass.simpleName
// Hoặc
val activityName = context.localClassName // Chỉ tên class, không package

Ví dụ hoàn chỉnh (MainActivity.kt)

package com.example.getactivityname

import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val simpleName = this::class.java.simpleName
        val fullName = this::class.java.name
        val canonicalName = this::class.java.canonicalName

        tvActivityName.text = "Simple: $simpleName\nFull: $fullName\nCanonical: $canonicalName"

        Log.d("ActivityName", "Simple: $simpleName, Full: $fullName")
    }
}

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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvActivityName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:lineSpacingExtra="8dp" />

</LinearLayout>

Các trường hợp sử dụng

  • Debug/Logging: Tag log tự động: Log.d(javaClass.simpleName, "message").
  • Analytics: Gửi tên screen tự động.
  • Navigation: Kiểm tra activity hiện tại trước khi navigate.
  • Testing: Verify activity đúng trong Espresso/UIAutomator.

Lưu ý

  • canonicalName có thể null cho anonymous/local class.
  • Proguard/R8 có thể obfuscate tên class → dùng @Keep hoặc rule keep nếu cần tên gốc.
  • Trong Fragment, dùng requireActivity().javaClass.simpleName.
  • Kotlin: ::class.java tương đương .javaClass.