■ はじめに
https://dk521123.hatenablog.com/entry/2013/09/25/002349
https://dk521123.hatenablog.com/entry/2013/09/26/010117
の続き。 で、画面の遷移を行ったが、値の受け渡しに関して、 何も触れなかったので、今回記載する。
■ サンプル
例1:Kotlin
Case1:標準APIを使用する
// ここでは、一部を抜粋。 wordListView.setOnItemClickListener { parent, view, position, id -> val englishWord = parent.getItemAtPosition(position) as EnglishWord val intentToMoveEditPage = Intent( this, EditActivity::class.java) // ★ここに注目:ここで渡している★ intentToMoveEditPage.putExtra("english_word_id", englishWord.id) startActivity(intentToMoveEditPage) } // 受け取る側 val englishWordId = intent.getStringExtra("english_word_id")
https://qiita.com/Takarkiz/items/61f7b1a8fe6a41ae171d
Case2:Kotlinライブラリ Anko を利用する場合
// ここでは、一部を抜粋。 // startActivityの引数に指定 this.startActivity<EditCommentActivity>("comment_id" to comment.id) 受け渡し先の画面 : EditCommentActivity.kt // intent?.getXxxExtraで受け取る(第一引数:キー、第二引数:デフォルト値) val commentId = intent?.getLongExtra("comment_id", -1L)
例2:Java
* 受け渡し元の画面:Intent(インテント)のメソッド putExtra() を受け渡す値を設定 * 受け渡し先の画面:Intent(インテント)のメソッド getStringExtra() で受けとる
デザイン部
* 画面を追加する + 「activity_main.xml」(メイン画面) => button x 1, EditText x 1 を追加 + 「activity_sub.xml」 (サブ画面) => button x 1, TextView x 1 を追加
プログラム部(受け渡し元の画面) : MainActivity.java
package com.example.androidhelloworld; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener { private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.button1 = (Button) findViewById(R.id.button1); this.button1.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: // インテントのインスタンス生成 Intent intent = new Intent(MainActivity.this, SubActivity.class); // EditTextのオブジェクトを取得 EditText editText1 = (EditText)findViewById(R.id.editText1); // !Point! インテントに値をセット intent.putExtra("Key", editText1.getText().toString()); // 次画面のアクティビティ起動 startActivity(intent); break; } } }
プログラム部(受け渡し先の画面) : SubActivity.java
package com.example.androidhelloworld; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class SubActivity extends Activity implements OnClickListener { private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); this.button1 = (Button) findViewById(R.id.button1); this.button1.setOnClickListener(this); TextView textView1 = (TextView)findViewById(R.id.textView1); // インテントを取得 Intent intent = getIntent(); // !Point! インテントに保存されたデータを取得 String recivedData = intent.getStringExtra("Key"); // 受け取ったデータを表示 textView1.setText(recivedData + " love you!"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: // インテントのインスタンス生成 Intent intent = new Intent(SubActivity.this, MainActivity.class); // 次画面のアクティビティ起動 startActivity(intent); break; } } }
その他 : AndroidManifest.xml
https://dk521123.hatenablog.com/entry/2013/09/26/010117
と同じなので、省略。
関連記事
ボタンイベントを処理するには
https://dk521123.hatenablog.com/entry/2013/09/25/002349
画面遷移をするには
https://dk521123.hatenablog.com/entry/2013/09/26/010117