Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Kotlin으로 버튼 클릭 시 다이얼로그가 닫히지 않도록 만드는 방법

이 예제에서는 Kotlin을 사용하여 버튼을 클릭했을 때 다이얼로그(Dialog)가 자동으로 닫히지 않도록 처리하는 방법을 알아봅니다.

일반적으로 AlertDialog의 긍정(Positive) 또는 부정(Negative) 버튼을 클릭하면 다이얼로그가 자동으로 닫히는데, getButton() 메서드로 버튼 객체를 가져온 뒤 리스너를 직접 설정하면 이 동작을 제어할 수 있습니다.

구현 단계

1단계 — 새 프로젝트 생성

Android Studio에서 File → New Project를 선택하고, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.

2단계 — 레이아웃 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" />

</RelativeLayout>

3단계 — MainActivity.kt 코드 작성

src/MainActivity.kt 파일에 아래 코드를 추가합니다. 핵심은 setPositiveButton("Ok", null)처럼 리스너에 null을 전달한 후, dialog.getButton()으로 실제 Button 객체를 얻어 커스텀 OnClickListener를 설정하는 것입니다. 이렇게 하면 버튼을 눌러도 다이얼로그가 닫히지 않고, 원하는 동작(여기서는 Toast 표시)만 실행됩니다.

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AlertDialog

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        val dialog: AlertDialog = AlertDialog.Builder(this)
            .setTitle("My Alert Dialog")
            .setMessage("Do you wanna dismiss this Dialog")
            .setPositiveButton("Ok", null)
            .setNegativeButton("Cancel", null)
            .show()

        val positiveButton: Button = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
        positiveButton.setOnClickListener {
            Toast.makeText(this, "Do not dismiss", Toast.LENGTH_SHORT).show()
        }
    }
}

4단계 — 매니페스트 설정

androidManifest.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
    <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>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 실행 옵션 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 앱의 기본 화면이 표시됩니다.

앱이 실행되면 다이얼로그가 나타나고, 여기서 'Ok' 버튼을 클릭하면 다이얼로그는 그대로 유지된 채 "Do not dismiss"라는 Toast 메시지만 표시되는 것을 확인할 수 있습니다.