0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AndroidStudio ダイアログを表示させる

Last updated at Posted at 2024-12-12

リストをタップするとダイアログを表示させる

イメージ

携帯.gif
トーストはおまけ

前提
リストを作成できる
クリックイベントを設定できる

app → java → com.・・・の上で右クリック → javaクラスを選択
java ファイルを作成
今回はTestDialogとする
image.png

クラスとメソッド
public class TestDialog extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("ダイアログタイトル");
        builder.setMessage("メッセージ\n"+listItemText+"を選んだ");
        builder.setPositiveButton("ポジ",new TestDialogClick());
        builder.setNegativeButton("ネガ",new TestDialogClick());
        builder.setNeutralButton("ニュー",new TestDialogClick());
        return builder.create();
    }
    
    private class TestDialogClick implements DialogInterface.OnClickListener{
        @Override
        public void onClick(DialogInterface dialog,int which){
            String msg = "";
            switch (which){
                case -1:
                    msg ="ポジティブボタンをクリック";
                    break;
                case -2:
                    msg ="ネガティブボタンをクリック";
                    break;
                case -3:
                    msg ="ニュートラルボタンをクリック";
                    break;
            }
            Toast.makeText(getActivity(),msg,Toast.LENGTH_LONG).show();
        }
    }
}

ダイアログ作成

ダイアログビルダーを作成し設定する

public Dialog onCreateDialogの内容
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState){
    //ダイアログの作成
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    //ダイアログのタイトル
    builder.setTitle("ダイアログタイトル");
    //ダイアログのメッセージ
    builder.setMessage("メッセージ\n"+listItemText+"を選んだ");
    //ポジティブボタン
    builder.setPositiveButton("ポジ",new TestDialogClick());
    //ネガティブボタン
    builder.setNegativeButton("ネガ",new TestDialogClick());
    //ニュートラルボタン
    builder.setNeutralButton("ニュー",new TestDialogClick());
    //ダイアログを表示
    return builder.create();
}

タイトルなし.png

3つのボタンについて

ポジティブ、ネガティブ、ニュートラルの3つが設定可能
場所はそれぞれのボタンで固定となる
記載しなかった場合にはダイアログに表示されない
ポジティブボタン
builder.setPositiveButton("ポジ",new TestDialogClick());
ネガティブボタン
builder.setNegativeButton("ネガ",new TestDialogClick());
ニュートラルボタン
builder.setNeutralButton("ニュー",new TestDialogClick());

引数2の new TestDialogClick()
これはボタンが押された時の処理となる

TestDialogClickの作成

set〇〇Buttonの引数2用のクラスを作成

private class TestDialogClickの内容
public class TestDialog extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState){
        //省略
    }
    
    //ダイアログの各ボタンが押された時
    private class TestDialogClick implements DialogInterface.OnClickListener{
        @Override
        public void onClick(DialogInterface dialog,int which){
            String msg = "";
            switch (which){
                //ポジティブ
                case -1:
                    msg ="ポジティブボタンをクリック";
                    break;
                //ネガティブ
                case -2:
                    msg ="ネガティブボタンをクリック";
                    break;
                //ニュートラル
                case -3:
                    msg ="ニュートラルボタンをクリック";
                    break;
            }
            //トーストを出す
            Toast.makeText(getActivity(),msg,Toast.LENGTH_LONG).show();
        }
    }
}

引数2 int which

ボタンと格納される数値
ポジティブ    -1
ネガティブ    -2
ニュートラル    -3

上記数値をswitch文で分岐させトーストに何を押したかを表示させる

String msg = "";
        switch (which){
            //ポジティブ
            case -1:
                msg ="ポジティブボタンをクリック";
                break;
            //ネガティブ
            case -2:
                msg ="ネガティブボタンをクリック";
                break;
            //ニュートラル
            case -3:
                msg ="ニュートラルボタンをクリック";
                break;
        }
        //トーストを出す
        Toast.makeText(getActivity(),msg,Toast.LENGTH_LONG).show();
    }
}
swichのcaseに設定している数値は下記のようにも指定可能
       コード     値
DialogInterface.BUTTON_POSITIVE     -1  
DialogInterface.BUTTON_NEGATIVE     -2 
DialogInterface.BUTTON_NEUTRAL     -3 

MainActivity.javaへ処理を記載

public class MainActivity extends AppCompatActivity {

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

        //リストをタップ
        ListView listview = findViewById(R.id.testList);
        listview.setOnItemClickListener(new ListClickTest());
    }

    //リストをタップした時の処理
    private class ListClickTest implements AdapterView.OnItemClickListener{
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long notInUse){
            TestDialog dialog = new TestDialog();
            dialog.show(getSupportFragmentManager(),"TestDialog");
        }
    }
}

ダイアログを表示させる

private class ListClickTestの内容
//リストをタップした時の処理
private class ListClickTest implements AdapterView.OnItemClickListener{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long notInUse){
        TestDialog dialog = new TestDialog();
        dialog.show(getSupportFragmentManager(),"TestDialog");
    }
}
  • 作成したTestDialogのインスタンスを作成
    TestDialog dialog = new TestDialog();

  • ダイアログを表示
    dialog.show(getSupportFragmentManager(),"TestDialog");
    引数1:getSupportFragmentManager()
     とりあえずこれを指定しておけばOK
    引数2:"TestDialog"
     インスタンスを生成したクラス名を文字列で指定

これで、タップした時にダイアログが表示される。
※ただしダイアログのメッセージに表示される"~を選んだ"の~の部分はタップしたアイテムの文字列を渡して設定してあげないといけない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?