Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Kotlin】ボタンをクリックしてもダイアログが閉じないようにする方法

この記事では、Kotlinを使用して、AlertDialogのボタンがクリックされたときにダイアログが自動的に閉じないようにする方法を解説します。

仕組みのポイント

通常、setPositiveButton()setNegativeButton()でボタンを追加すると、タップした瞬間にダイアログは自動的に閉じます。
これを防ぐには、リスナーとしてnullを指定してダイアログを表示し、その後getButton()メソッドでボタンオブジェクトを取得して、独自のOnClickListenerを設定します。こうすることで、ダイアログを閉じるタイミングを自由に制御できるようになります。

ステップ1:新規プロジェクトの作成

Android Studioで「File」→「New Project」を選択し、必要な項目を入力して新しいプロジェクトを作成します。使用言語はKotlinを選択してください。

ステップ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に以下のコードを追加します。

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"

        // リスナーにnullを渡すことで、自動的に閉じないダイアログを作成
        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の確認

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アイコン【Kotlin】ボタンをクリックしてもダイアログが閉じないようにする方法をクリックします。デバイスの一覧から自分のスマートフォンを選択すると、実機にデフォルト画面が表示されます。

【Kotlin】ボタンをクリックしてもダイアログが閉じないようにする方法

ダイアログの「OK」ボタンをタップしてもダイアログは閉じず、代わりに「Do not dismiss」というトーストメッセージが表示されれば成功です。バリデーションチェックなど、条件を満たした場合のみダイアログを閉じたい場面で活用できるテクニックです。

  1. 【Android開発】ボタンをタップしたときに色を変更する方法をわかりやすく解説

    この記事では、Androidアプリでボタンをクリック(タップ)したときに、ボタンの背景色を変更する方法をステップごとに解説します。サンプルコード付きなので、Android開発の初心者の方でもすぐに試せますよ。 手順1:新規プロジェクトを作成する まずはAndroid Studioで新しいプロジェクトを作成しましょう。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成します。 手順2:レイアウトファイル(activity_main.xml)を編集する res/layout/activity_main.xml に以下のコードを追加します。ボタン

  2. 【Android】ボタンをクリックしてもダイアログが閉じないようにする方法

    はじめに このチュートリアルでは、AndroidアプリでAlertDialogのボタンがクリックされたときに、ダイアログが閉じないようにする方法を解説します。 通常、AlertDialogのPositiveButtonやNegativeButtonを設定すると、ボタンをタップした時点でダイアログは自動的に閉じます。しかし、「入力チェックを通過するまでダイアログを閉じたくない」といったケースでは、この自動的なクローズ動作が邪魔になります。そんなときに役立つのが、ダイアログ表示後にボタンのクリックリスナーを上書きするテクニックです。 仕組みのポイント 鍵となるのは、次の流れです。 setPosi