どうも、tatsuです!
今日は、ダイアログからアクティビティへ値を引き渡す方法を説明します。
※この記事で使用しているAndroid Studioのバージョンは2.3.3です。
ダイアログからアクティビティへ値を引き渡す
CustomDialogFlagment
CustomDialogFlagmentは以下のようにします。
public class CustomDialogFlagment extends DialogFragment { // ダイアログが生成された時に呼ばれるメソッド ※必須 public Dialog onCreateDialog(Bundle savedInstanceState){ // ダイアログ生成 AlertDialogのBuilderクラスを指定してインスタンス化します AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); // タイトル設定 dialogBuilder.setTitle("ダイアログタイトル"); // 表示する文章設定 dialogBuilder.setMessage("元画面に返す値を入力してください"); // 入力フィールド作成 final EditText editText = new EditText(getActivity()); dialogBuilder.setView(editText); // OKボタン作成 dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // editTextの内容を元画面に反映する // editTextから値を取得 String returnValue = editText.getText().toString(); // MainActivityのインスタンスを取得 MainActivity mainActivity = (MainActivity) getActivity(); mainActivity.setTextView(returnValue); } }); // NGボタン作成 dialogBuilder.setNegativeButton("NG", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // 何もしないで閉じる } }); // dialogBulderを返す return dialogBuilder.create(); } }
activity_main.xml
activity_main.xmlは以下のようにします。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.android.tatsu.myapplication.MainActivity"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="ここにダイアログから値が返ります" android:textSize="20sp"/> <Button android:id="@+id/dialogButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ダイアログを表示する"/> </LinearLayout>
MainActivity.java
MainActivity.javaは以下のようにします。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // idがdialogButtonのButtonを取得 Button dialogBtn = (Button) findViewById(R.id.dialogButton); // clickイベント追加 dialogBtn.setOnClickListener(new View.OnClickListener() { @Override // クリックしたらダイアログを表示する処理 public void onClick(View v) { // ダイアログクラスをインスタンス化 CustomDialogFlagment dialog = new CustomDialogFlagment(); // 表示 getFagmentManager()は固定、sampleは識別タグ dialog.show(getFragmentManager(), "sample"); } }); } // ダイアログで入力した値をtextViewに入れる - ダイアログから呼び出される public void setTextView(String value){ TextView textView = (TextView) findViewById(R.id.text); textView.setText(value); } }
結果
↓ボタン押下前
↓ボタン押下後
↓OKボタン押下後
コメントを残す