アクティビティ間でデータをやり取りする |
インテントでアクティビティ間でデータをやり取りすることができます。(できないと困りますが...) メインからサブへのデータのやり取りの概要です。 MainActivituy.Java public void onBtnClick(View v) { Intent sub = new Intent(this, SubActivity.class); //新しい作法で起動 sub.putExtra("fromMainText", "Hello Sub World."); mSubLauncher.launch(sub); } putExtra()の第1引数はキーとなる任意の文字列です。第2引数に渡したい値を入れます。 文字列以外にも数値や配列などが適用できます。 SubActivituy.Java protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); //メインからのデータ取得 Intent intent = getIntent(); TextView tv = findViewById(R.id.textView); String str = intent.getStringExtra("fromMainText").toString(); tv.setText(str); } サブはonCreate()でメインから渡される値を取得します。メインで設定したキー fromMainText を使って値を取得します。 getStringExtra()以外にgetFloatExtra()などgetXXXXExtra()形式のメソッドがたくさんあります。 サブからメインへのデータのやり取りの概要です。 使用するメソッドが逆になりました。 SubActivituy.Java public void onBtnClick(View v) { Intent intent = new Intent(); intent.putExtra("fromSubText", "How do you do?"); setResult( Activity.RESULT_OK, intent ); finish(); }putExtra()はメインでの使われ方と同じです。 MainActivituy.Java private class ActivityResultCallbackSub implements ActivityResultCallback<ActivityResult> { @Override public void onActivityResult(ActivityResult result) { if( Activity.RESULT_OK == result.getResultCode() ) { TextView tv = findViewById(R.id.textViewMain); String str = result.getData().getStringExtra("fromSubText"); tv.setText(str); } } }メインではresult.getData().getStringExtra()ちょっと長めですが、サブでの使われ方と同じです。 |