リストをタップするとダイアログを表示させる
app → java → com.・・・の上で右クリック → javaクラスを選択
java ファイルを作成
今回はTestDialogとする
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();
}
}
}
ダイアログ作成
ダイアログビルダーを作成し設定する
@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();
}
3つのボタンについて
ポジティブ、ネガティブ、ニュートラルの3つが設定可能
場所はそれぞれのボタンで固定となる
記載しなかった場合にはダイアログに表示されない
ポジティブボタン
builder.setPositiveButton("ポジ",new TestDialogClick());
ネガティブボタン
builder.setNegativeButton("ネガ",new TestDialogClick());
ニュートラルボタン
builder.setNeutralButton("ニュー",new TestDialogClick());
引数2の new TestDialogClick()
これはボタンが押された時の処理となる
TestDialogClickの作成
set〇〇Buttonの引数2用のクラスを作成
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();
}
}
コード | 値 |
---|---|
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 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"
インスタンスを生成したクラス名を文字列で指定
これで、タップした時にダイアログが表示される。
※ただしダイアログのメッセージに表示される"~を選んだ"の~の部分はタップしたアイテムの文字列を渡して設定してあげないといけない