개요

안드로이드에서 프로그래스 바는 작업 진행 상황을 사용자에게 시각적으로 표시하기 위해 사용됩니다. 일반적으로 비동기 작업(예: 네트워크 요청) 중 사용자에게 로딩 상태를 알리기 위해 사용되며, 사용자가 기다리는 동안 UI가 차단되지 않도록 도와줍니다.

예제 코드

import android.os.Bundle
import android.os.Handler
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private val handler = Handler()
    private var isProgressBarVisible = false // 프로그래스 바의 표시 여부를 추적

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 프로그래스 바를 처음에 보이지 않도록 설정
        binding.progressBar.visibility = View.INVISIBLE // 프로그래스 바를 숨김

        // 버튼 클릭 시 프로그래스 바 제어
        binding.startButton.setOnClickListener {
            if (!isProgressBarVisible) { // 프로그래스 바가 보이지 않을 때만 동작
                showProgressBar()
            }
        }
    }

    private fun showProgressBar() {
        isProgressBarVisible = true // 프로그래스 바 표시 상태 업데이트
        binding.progressBar.visibility = View.VISIBLE // 프로그래스 바 표시

        // 3초 후 프로그래스 바 숨기기
        handler.postDelayed({
            binding.progressBar.visibility = View.GONE // 프로그래스 바 숨김
            isProgressBarVisible = false // 프로그래스 바 상태 업데이트
        }, 3000)
    }
}

설명

  • View.INVISIBLE:
    • binding.progressBar.visibility = View.INVISIBLE을 사용하여 프로그래스 바를 초기 상태에서 보이지 않도록 설정합니다.
    • View.INVISIBLE은 뷰가 화면에서 보이지 않도록 하지만, 해당 뷰가 여전히 레이아웃에 공간을 차지합니다. 이는 사용자가 프로그래스 바의 공간을 인식할 수 있지만, 실제로는 보이지 않는 상태를 의미합니다.
  • isProgressBarVisible 변수:
    • 이 변수는 프로그래스 바의 현재 표시 상태를 추적합니다. 초기값은 false로 설정되며, 프로그래스 바가 보일 때 true로 업데이트됩니다.
  • 버튼 클릭 이벤트:
    • 버튼 클릭 시 isProgressBarVisiblefalse일 때만 showProgressBar() 메서드를 호출합니다. 이는 이미 프로그래스 바가 보이는 상태일 경우 중복 호출을 방지합니다.
  • showProgressBar() 메서드:
    • 프로그래스 바를 표시하고 isProgressBarVisibletrue로 설정합니다.
    • 핸들러를 사용하여 3초 후에 프로그래스 바를 숨기고, 다시 isProgressBarVisiblefalse로 설정합니다.