🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

Q&A

解決済

1回答

1210閲覧

xmlを使用したダイアログレイアウトをsetTextで文字を反映したい。

ToaZI

総合スコア39

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

0グッド

0クリップ

投稿2021/03/09 09:53

ダイアログ表示の際、押されたボタンによってダイアログの中身を変えたいのですが、
どこにsetTextを記入すればいいのかわかりません。

別フラグメントにていくつかボタンを用意し、そのボタンごとに値を変えて
ダイアログレイアウトののid.texttimeをsetTextで変更したいです。

ご教示よろしくお願いします。

diarogfragment.java

1public class DashboardSaveFragment extends DialogFragment { 2 @Override 3 public Dialog onCreateDialog(Bundle savedInstanceState) { 4 // Use the Builder class for convenient dialog construction 5 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 6 LayoutInflater inflater = requireActivity().getLayoutInflater(); 7 builder.setView(inflater.inflate (R.layout.fragment_dialog, null)) 8 .setMessage(R.string.dialog_fire_missiles) 9 .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() { 10 public void onClick(DialogInterface dialog, int id) { 11 } 12 }) 13 .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 14 public void onClick(DialogInterface dialog, int id) { 15 // User cancelled the dialog 16 } 17 }); 18 // Create the AlertDialog object and return it 19 return builder.create(); 20 } 21}

fragment_dialog.xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:layout_width="match_parent" 5 android:layout_height="wrap_content" 6 android:orientation="vertical"> 7 8 <EditText 9 android:id="@+id/edit_text" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:layout_marginLeft="4dp" 13 android:layout_marginTop="16dp" 14 android:layout_marginRight="4dp" 15 android:layout_marginBottom="4dp" 16 android:autofillHints="@string/hint" 17 android:hint="@string/hint" 18 android:inputType="text" /> 19 20 <LinearLayout 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:orientation="horizontal" 24 android:layout_marginLeft="4dp" 25 android:layout_marginTop="16dp" 26 android:layout_marginRight="4dp" 27 android:layout_marginBottom="4dp"> 28 29 <TextView 30 android:id="@+id/textView5" 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:layout_weight="1" 34 android:text="Time:" 35 android:gravity="right" 36 android:textSize="20dp"/> 37 38 <TextView 39 android:id="@+id/texttime" 40 android:layout_width="wrap_content" 41 android:layout_height="wrap_content" 42 android:layout_weight="1" 43 android:text="TextView" 44 android:textSize="20dp"/> 45 </LinearLayout> 46 <TextView 47 android:id="@+id/textView7" 48 android:layout_width="wrap_content" 49 android:layout_height="wrap_content" 50 android:layout_weight="1" 51 android:text="100m" 52 android:layout_marginLeft="4dp" 53 android:layout_marginTop="16dp" 54 android:layout_marginRight="4dp" 55 android:layout_marginBottom="4dp" 56 android:layout_gravity="center" 57 android:textSize="20dp"/> 58 <TextView 59 android:id="@+id/textdate" 60 android:layout_width="wrap_content" 61 android:layout_height="wrap_content" 62 android:layout_weight="1" 63 android:text="2020/3/08/12:08" 64 android:layout_gravity="center" 65 android:layout_marginLeft="4dp" 66 android:layout_marginTop="16dp" 67 android:layout_marginRight="4dp" 68 android:layout_marginBottom="4dp" 69 android:textSize="20dp"/> 70 71</LinearLayout>

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

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

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

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

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

hoshi-takanori

2021/03/09 12:00

setText そのものは inflate した view から findViewById して setText すればいいのですが、setText する値を呼び出し側から渡したいってことですよね?
ToaZI

2021/03/09 12:07

返答ありがとうございます。 フラグメントA(ボタンが複数あり、ボタンによって渡す値が違う。) ダイアログフラグメント(渡した値を受取りをsetTextしたい) このような形です。 hoshi様のおっしゃっているinflateも試したのですがどこに記述したらいいのかわからず、コードが反映されませんでした。 ダイアログフラグメントのどこに記述すればいいのかわからず今回質問させていただきました。 すみません。質問内容に記載すべき内容でした。
guest

回答1

0

ベストアンサー

まず、xml で定義した TextView に setText する方法ですが、現在 inflate した view を直接 builder.setView していますが、この行をばらしていったん変数 view に入れて、view から目的の TextView を取り出して、setText します。

DashboardSaveFragment の onCreateDialog メソッド (修正箇所)

diff

1- builder.setView(inflater.inflate (R.layout.fragment_dialog, null)) 2+ View view = inflater.inflate (R.layout.fragment_dialog, null); 3+ TextView textView = view.findViewById(R.id.texttime); 4+ textView.setText("表示する文字列"); 5+ builder.setView(view) 6 .setMessage(R.string.dialog_fire_missiles) 7 // 以下略

次に、setText する文字列を受け取る方法ですが、DashboardSaveFragment のプロパティにして直接セットすると、画面回転の際などにフラグメントが作り直されてプロパティの値もリセットされるので、Bundle に詰めて setArguments してもらう必要があります。

DashboardSaveFragment の onCreateDialog メソッド (再修正)

diff

1 View view = inflater.inflate (R.layout.fragment_dialog, null); 2 TextView textView = view.findViewById(R.id.texttime); 3- textView.setText("表示する文字列"); 4+ // 表示する文字列を Bundle から受け取って setText する。 5+ Bundle args = getArguments(); 6+ if (args != null) { 7+ textView.setText(getArguments().getString("text")); 8+ } 9 builder.setView(view) 10 .setMessage(R.string.dialog_fire_missiles) 11 // 以下略

呼び出し元のフラグメント

diff

1 DashboardSaveFragment fragment = new DashboardSaveFragment(); 2 3+ // 表示する文字列を Bundle に詰めて setArguments する。 4+ Bundle args = new Bundle(); 5+ args.putString("text", "表示する文字列"); 6+ fragment.setArguments(args); 7 8 fragment.show(getFragmentManager(), "dialogFragment");

おまけ。次のような static メソッドを作っておくと、引数の設定し忘れを防げるのでお勧めです。

diff

1 public class DashboardSaveFragment extends DialogFragment { 2 3+ // 呼び出し元は new DashboardSaveFragment() の代わりにこのメソッドを呼ぶ。 4+ public static DashboardSaveFragment newInstance(String text) { 5+ DashboardSaveFragment fragment = new DashboardSaveFragment(); 6+ Bundle args = new Bundle(); 7+ args.putString("text", text); 8+ fragment.setArguments(args); 9+ return fragment; 10+ }

投稿2021/03/09 13:56

hoshi-takanori

総合スコア7899

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

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

ToaZI

2021/03/09 14:00

本当にいつもとても丁寧にありがとうございます。 早速試してみます!
ToaZI

2021/03/09 14:09

無事反映させることができました! ありがとうございます。 本当にいつもお世話になります。 今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問