質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1796閲覧

選択したリストによって表示するダイアログを変える方法

tasojiro

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/07/03 18:15

編集2021/07/09 03:04

前提・実現したいこと

現在、android studioでアプリケーションを作成しています。
実装したい機能は、リストビューの中から選択したリストによって表示するダイアログを変える機能です。

例えば、カレー,ハンバーガー,寿司などのリストがあった場合、ハンバーガーを選択すると「title:ハンバーガー,msg:ハンバーガーが選択されました。」というダイアログが。カレーを選択すると「title:カレー,msg:カレーが選択されました。」といった感じの機能です。

現在は、ここにダイアログを表示するコードを記述すれば良いのかな?という部分までは理解しているのですが、どう記述すれば良いのかわからない状態です。

該当のソースコード

Java

1package com.websarva.wings.android.town_infoapp; 2 3 4import android.os.Bundle; 5import android.view.MenuItem; 6import android.view.View; 7import android.widget.AdapterView; 8import android.widget.ArrayAdapter; 9import android.widget.ListView; 10 11import androidx.appcompat.app.ActionBar; 12import androidx.appcompat.app.AppCompatActivity; 13 14import java.util.ArrayList; 15 16public class HelpActivity extends AppCompatActivity { 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_help); 22 23 // ListViewに表示するリスト項目をArrayListで準備する 24 ArrayList data = new ArrayList<>(); 25 data.add("カレー"); 26 data.add("ハンバーガー"); 27 data.add("寿司"); 28 29 ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); 30 31 // ListViewにArrayAdapterを設定する 32 ListView helplist = (ListView)findViewById(R.id.help_list); 33 helplist.setAdapter(adapter); 34 helplist.setOnItemClickListener(new ListItemClickListener()); 35 } 36 37 private class ListItemClickListener implements AdapterView.OnItemClickListener{ 38 public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 39 //String item = (String)parent.getItemAtPosition(position); 40 41 // ここにダイアログの表示をするコード? 42 OrderConfirmDialogFragment dialogFragment = new OrderConfirmDialogFragment(); 43 dialogFragment.show(getSupportFragmentManager(), "OrderConfirmDialogFragment"); 44 } 45 } 46}

新規に追加したクラス

java

1package com.websarva.wings.android.town_infoapp; 2 3import android.app.AlertDialog; 4import android.app.Dialog; 5import android.content.DialogInterface; 6import android.os.Bundle; 7 8import androidx.fragment.app.DialogFragment; 9import androidx.fragment.app.FragmentManager; 10 11public class OrderConfirmDialogFragment extends DialogFragment { 12 @Override 13 public Dialog onCreateDialog(Bundle savedInstanceState) { 14 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 15 builder.setTitle(R.string.dialog_title); 16 builder.setMessage(R.string.dialog_msg); 17 builder.setNegativeButton(R.string.dialog_bt_ng, new DialogButtonClickListener()); 18 AlertDialog dialog = builder.create(); 19 return dialog; 20 } 21 22 private class DialogButtonClickListener implements DialogInterface.OnClickListener { 23 @Override 24 public void onClick (DialogInterface dialog , int which){ 25 String msg = ""; 26 switch (which) { 27 case DialogInterface.BUTTON_NEGATIVE: 28 msg = getString(R.string.dialog_bt_ng); 29 break; 30 } 31 } 32 } 33} 34

onClick関数のmsgは使用していませんが、ダイアログの閉じるボタンを実装する際に必要な関数だったので記述しています。

試したこと

別クラス(新規にクラスを作る)を作成したのですが、リストの情報の渡し方が分からなかったので、この「HelpActivity.java」内に一緒に記述してしまいました。

補足情報(FW/ツールのバージョンなど)

足りない情報などがあれば、指摘して頂けると追記します。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2021/07/05 14:58

とりあえず、「リストの選択をしたら(選択の内容に関係なく)テキトウなダイアログが表示される」というプログラムにして動作するようにしては如何でしょうか。 その後に、ダイアログの内容を選択によって変えるようにしていけば良いように思います。
tasojiro

2021/07/06 13:12

適当なダイアログを表示することには、別クラス作成を行いリスナを登録するような実装で成功しました。(「試したこと」で記述されている方法) しかし、この場合だとリストの値を渡す方法が見つからなかった点と、それほど複雑な構造でもないと予測される点から一つのファイル(一つの関数)で記述するほうが良いという点から判断し該当のソースのような形になりました。 仮にも、ダイアログの表示が成功したコードでも「ダイアログの内容を選択によって変える」という部分が実装できません。。。 よろしくお願いいたします。
jimbe

2021/07/06 18:28

クラスを分けていてもファイルを分けていても構いませんが、ご提示のコードにはダイアログを表示する部分が丸々ありませんので、どのようなコードによってダイアログを表示したのか、なぜ『「ダイアログの内容を選択によって変える」という部分が実装でき』ないのかが推測も出来ません。 宜しければダイアログの表示まで出来ているコード一通りをご提示願えますか。
tasojiro

2021/07/09 03:00

返信が遅れて申し訳ありません。 只今、ダイアログが表示されるようなコードを追記いたしました。 できれば1つのクラスでダイアログ表示は実装してしまいたいのですが、 好ましくなかったり現実的ではない場合は、新規クラス追加の状態で実装したいと思います。 よろしくお願いいたします。
jimbe

2021/07/09 09:54 編集

コード追加ありがとうございます。
guest

回答1

0

ベストアンサー

フラグメントにはパラメータを渡すための void setArguments(Bundle) というメソッドと、それを取り出す Bundle getArguments() というメソッドがあります。
これらを用いまして OrderConfirmDialogFragment 生成時に必要な文字列を渡し、onCreateDialog で必要な文字列を取り出すことが出来ます。

HelpActivity (一部)

java

1 public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 2 String item = (String)parent.getItemAtPosition(position); 3 4 // ここにダイアログの表示をするコード? 5 OrderConfirmDialogFragment dialogFragment = new OrderConfirmDialogFragment(); 6 Bundle args = new Bundle(); 7 args.putString(OrderConfirmDialogFragment.ARGS_TITLE, "タイトル: "+item); 8 args.putString(OrderConfirmDialogFragment.ARGS_MESSAGE, "メッセージ: "+item); 9 dialogFragment.setArguments(args); 10 dialogFragment.show(getSupportFragmentManager(), "OrderConfirmDialogFragment"); 11 }

OrderConfirmDialogFragment (一部)

java

1 static final String ARGS_TITLE = "title"; 2 static final String ARGS_MESSAGE = "message"; 3 @Override 4 public Dialog onCreateDialog(Bundle savedInstanceState) { 5 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 6 builder.setTitle(getArguments().getString(ARGS_TITLE)); 7 builder.setMessage(getArguments().getString(ARGS_MESSAGE)); 8 builder.setNegativeButton(R.string.dialog_bt_ng, new DialogButtonClickListener()); 9 AlertDialog dialog = builder.create(); 10 return dialog; 11 }

投稿2021/07/09 10:59

jimbe

総合スコア12543

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tasojiro

2021/07/12 13:02

void setArguments(Bundle) メソッド、Bundle getArguments()メソッド、勉強になりました。 itemに格納された文字列を表示することが出来ました。 メッセージの部分は適宜内容によって変更していきたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問