遷移先画面にデータを渡す
今度は逆に遷移画面先からデータを戻すことをしてみたいと思います
まずはMainActivityを以下のように修正します
変更点としては
1.IntentにrequestCodeを追加する
2.SubActivityから戻ってきたときのonActivityResultを追加する
です
(1)のrequestCodeはMainActivityからどのActivityに遷移したかを設定する値です
今回はSubActivityに移動は“1”としていますが
例えばSubActivity2には“2”のように複数の設定が可能です
次に(2)でonActivityResultを追加します
これは遷移した先から戻ってきたときに実行されるものです
はじめにrequestCodeが1かどうか確認し、結果がOKかどうか確認しています
またmainのレイアウトにもtextViewを追加しましたのでそちらも載せておきます
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="subに移動" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout>
MainActivity.java
package blog.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { int requestCode=1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setTitle("MainActivity"); //id button1をbに当てはめている Button b = (Button)findViewById(R.id.button1); //bが押された時の動作 b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //intentの作成 Intent intent = new Intent(MainActivity.this,SubActivity.class); //putExtraで渡す値を設定 intent.putExtra("int Value", 100); intent.putExtra("String Value", "test"); //intentをスタート startActivityForResult(intent, requestCode); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if (resultCode == RESULT_OK) { CharSequence return_string = data.getCharSequenceExtra("return String"); //id textView1をt1に当てはめている TextView t1 = (TextView)findViewById(R.id.textView1); //受け取った値を表示 t1.setText("受け取った文字は"+return_string); } } } }
次にSubActivityを修正します
こちらはfinish()でActivityを終了する直前にMainActivityに
値を渡しています
今回はtest2というStringを戻します
その後setResultでRESULT_OKと設定したintentを送信し
finishで終了させます
以下SubActivity.java
package blog.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class SubActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); setTitle("SubActivity"); Intent intent = getIntent(); //MainActivityから値を受け取る int getint = intent.getIntExtra("int Value",0); CharSequence getstring = intent.getCharSequenceExtra("String Value"); //id textView1をt1に当てはめている TextView t1 = (TextView)findViewById(R.id.textView1); //id textView1をt2に当てはめている TextView t2 = (TextView)findViewById(R.id.textView2); //受け取った値を表示 t1.setText("受け取った数値は"+String.valueOf(getint)); t2.setText("受け取った文字は"+getstring); //id button1をbに当てはめている Button b = (Button)findViewById(R.id.button1); //bが押された時の動作 b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //intentの作成 Intent intent = new Intent(SubActivity.this,MainActivity.class); //putExtraで渡す値を設定 intent.putExtra("return String", "test2"); setResult(RESULT_OK, intent); finish(); } }); } }まず実行するとMainActivityが表示されます
textView1の初期値はなにも設定していないのでTextViewと表示されます
一度SubActivityに移動し・・・
戻ってくると・・・
TextView1が変化しているのがわかります
スポンサードリンク