アクティビティ間でデータをやり取りする
Passing Data Between Activities
アクティビティにリンクするの動作を
startActivity()メソッドを使って、ほかのアクティビティを
始動させる方法を確認してみます。
1つの一般的なタスクは、始動している他のアクティビティが
いくつかのデータをそのアクティビティに渡す動作をする必要があります。
例えば、使っている他のアクティビティをいくつかの関連したデータに
接続させたいと考えたときに、
ユーザの名前を他のアクティビティに渡すことになります。
ユーザがすべてのデータに接続し終わったときには、
そのデータを呼び出しているアクティビティから戻す必要も出てきます。
こういう理由で、開発者にはアクティビティの間に
データを渡したり、戻すことができる必要が出てきます。
データのやり取りをするのに、他のアクティビティにデータを渡す
Intentクラスを使うことができます。
手付かずのデータ型を他のアクティビティに渡すために、
以下のようにputExtra()メソッドを使います。
package net.learn2develop.passingdata;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view){
Intent i = new
Intent("net.learn2develop.SecondActivity");
//---use putExtra() to add key/value pairs---
i.putExtra("str1", "This is a string");
i.putExtra("age1", 25);
}
}
前のステートメントはIntentオブジェクトを作り、
putExtra()メソッドを使って2つの値を与えます。
1つは文字列で、1つは数字の値です。
Intentオブジェクトを使ってBundleオブジェクトに渡すこともできます。
Bundleオブジェクトは辞書オブジェクトのようなもので、
key/valueのペアで値を指定することができます。
Intentオブジェクトを使ってBundleオブジェクトにデータを渡すため、
Bundleオブジェクトを作り、事前に設定します。
そしてputExtra()メソッドをつかってIntentオブジェクトに
以下のコードのようにBundleオブジェクトを付け足します。
public void onClick(View view){
Intent i = new
Intent("net.learn2develop.SecondActivity");
//---use putExtra() to add new key/value pairs---
i.putExtra("str1", "This is a string");
i.putExtra("age1", 25);
//---use a Bundle object to add new key/value
//---pairs
Bundle extras = new Bundle();
extras.putString("str2", "This is another string");
extras.putInt("age2", "35");
//---attach the Bundle object to the Intent object---
i.putExtras(extras);
}
Intentオブジェクトを使って他のアクティビティを使い始める時に、
Intentオブジェクトにデータを加えることは、
目的のアクティビティにデータを渡したことになります。
いくつかのデータを目的のアクティビティから戻すつもりで
他のアクティビティを呼び出すには、
startActivityForResult()メソッドを以下のように使います。
public void onClick(View view){
Intent i = new
Intent("net.learn2develop.SecondActivity");
//---use putExtra() to add new key/value pairs---
i.putExtra("str1", "This is a string");
i.putExtra("age1", 25);
//---use a Bundle object to add new key/values
//pairs---
Bundle extras = new Bundle();
extras.putString("str2", "This is another string");
extras.putInt("age2", 35);
//---attach the Bundle object to the Intent object---
i.putExtras(extras);
//---start the activity to get a result back---
startActivityForResult(i,1);
}
このstartActivityForResult()メソッドは、
リクエストコードと同じようにIntentオブジェクトをとります。
リクエストコードは0(ゼロ)以上の値です。
このリクエストコードは戻ってくるアクティビティの確認に使われ、
1つ以上のアクティビティが同時に呼び出せるようにします。
もしリクエストコードに-1をセットしたら、
startActivityForResult()の呼び出しは、startActivity()と
同等なものとなります。
そうなると、目的のアクティビティからデータを返還させ
受け取ることができなくなります。
ターゲットとなるアクティビティでは、アクティビティに渡された
データを検索するために、getIntent()メソッドを使い、
アクティビティに渡されたIntentオブジェクトの実例を獲得します。
putExtra()メソッドを通して渡された単純なデータ型を受け取るために、
get<データ型>Extra()メソッドを使い、
そのデータ型はおそらくString,int,floatなどになると思います。
以下のコードはどのようにデータ型の原型が検索されるかを
示したものです。
package net.learn2develop.passingdata;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class SecondActivity extends Activity{
@Override
public void onCreate(Bundle savesInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//---get the data passed in using getStringExtra()---
Toast.makeText(this,getIntent().getStringExtra("str1"),
Toast.LENGTH_SHORT).show();
//---get the data passed in using getIntExtra()---
Toast.makeText(this, Integet.toString(
getIntent().getIntExtra("age1", 0)),
Toast.LENGTH_SHORT).show();
}
}
Bundleオブジェクトを通じて渡されたデータを検索するためには、
IntentオブジェクトのgetExtras()メソッドを使います。
getExtras()メソッドはBundleオブジェクトを返し、
get<データ型>()メソッドを使って、いろんなkey/valueを
検索するのに使えます。
検索するデータ型はString,intなどです。
@override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//---get the data passed in using getStringExtra()---
Toast.makeText(this,getIntent().getStringExtra("str1"),
Toast.LENGTH_SHORT).show();
//---get the data passed in using getIntExtra()---
Toast.makeText(this,Integer.toString(
getIntent().getIntExtra("age1", 0)),
Toast.LENGTH_SHORT).show();
//---get the Bundle object passed in---
Bundle bundle = getIntent().getExtras();
//---get the data using the getString()---
Toast.makeText(this, bundle.getString("str2"),
Toast.LENGTH_SHORT).show();
//---get the data using the getInt() methiod---
Toast.makeTect(this,Integet.toString(bundle.getInt("age2")),
Toast.LENGTH_SHORT).show();
}
目的は呼び出しているアクティビティにデータを
戻すことにもなるでしょう。
データを戻すためには、他にIntentオブジェクトを作り、
値をセットさせます。
setData()アクティビティをIntentオブジェクトを
通じてUrlオブジェクトを渡すこともできます。
アクティビティに結果を戻すためには、
以下のようにsetResult()メソッドを使います。
package net.learn2develop.passingdata;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class SecondActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//---get the data passed in using getStingExtra()---
Toast.makeText(this,getIntent().getStringExtra("str1"),
Toast.LENGTH_SHORT).show();
//---get the data passed in using getIntExtra()---
Toast.makeText(this,Integer.toStoring(
getIntent().getIntExtra("age1", 0)),
Toast.LENGTH_SHORT).show();
//---get the Bundle object passed in---
Bundle bundle = getIntent().getExtras();
//---get the data using the getString()---
Toast.makeText(this, bundle.getString("str2"),
Toast.LENGTH_SHORT).show();
//---get the data using the getInt() method---
Toast.mamkeText(this,Integer.toString(bundle.getInt("age2")),,br />
Toast.LENGTH_SHORT).show();
}
public void onClick(View view){
//---use an Intent object to return data---
Intent i = new Intent();
//---use the putExtra() method to return some value---
i.putExtra("age3", 45);
//---use the setData() method to return some value---
i.setData(Uri.parse("http://www.learn2develop.net"));
//---set the result with OK and the Intent object---
setResult(RESULT_OK, i);
finish()
}
}
RESULT_OK定数は、戻ったデータが無視すべきものかどうか
呼び出しているアクティビティに示すことができるようになります。
もし呼び出しているアクティビティに結果を無視させたければ、
RESULT_CANCELLED定数を使うこともできます。
呼び出しているアクティビティが結果をどのように解釈するかは
ここに現れますが、それら2つの定数は目安として使います。
呼び出しているメインのアクティビティに戻すには、
onActivityResult()メソッドを実行します。
現在のアクティビティが結果を受け取っているかを確認するために、
resultコードを確認する必要があります。
このresultコードは最初の方でstartActivityForResult()メソッドに
渡された数字のことで、例では1でした。
//---start the activity to get a result back---
startActivityForResult(i, 1);
以下のコードでresultコードがRESULT_OKかどうかを
チェックすることもできます。
package net.learn2develop.passingdata;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import adnroi.widget.Toast;
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void onClick(View view){
Intent i = new
Intent("net.learn2develop.SecondActivity");
//---use putExtra() to add new key/value pairs---
i.putExtra("str1", "This is a string");
i.putExtra("age1", 25);
//---use a Bundle object to add new key/value pairs---
Bundle extras = new Bundle();
extras.putString("str2", "This is another string");
extras.putInt("age2", 35);
//---attach the Bundle object to the Intent object---
i.putExtras(extras);
//---start the activity to get a result back---
startActivityForResult(i, 1);
}
public void onActivityResule(int requestCode,
int resultCode, Intyent data)
{
//---check if the request code is 1---
if(requestCode == 1){
//---if the result is OK---
if(resultCode == RESULT_OK){
//---get the result using getIntExtra()---
Toast.makeText(this, Integet.toString(
data.getIntExtra("age3" 0)),
Toast.LENGTH_SHORT).show();
//---get the result using getData()---
Uri url = data.getData();
Toast.makeText(this, url.toString(),
Toast.LENGTH_SHORT).show();
}
}
}
}
setData()メソッドを使って送ったデータを検索するためには、
IntentオブジェクトのgetData()メソッドを使います。
onActivityResult()メソッドの二番目の引数として渡されてます。
|
【用語解説】
XML
HTMLと同じような言語ですが、
すべての型の複雑なデータ構造を
送信するための設計ができる
ファイル型式。
オブジェクト
ある手続きを持った
データアイテムで、
他の手続きと関連づけされるもの
metaタグ
ウェブページに与える
情報の宣言につかわれ
検索エンジン・ウェブアプリ
などにウェブページの内容を
伝える役目をする。
metaタグの内容は
ページ内に表示されない。
コンストラクタ
オブジェクト指向
プログラミングで使われ
新しいオブジェクトが
作られ時に呼び出される
メソッドのこと。
クラス
オブジェクト指向
プログラミングでの
オブジェクトの型
オブジェクト指向プログラミング
プログラミングの
方式のことで、
プログラマはデータ型を
定義できるだけでなく
自動的にデータ型と
メソッドを関連付け
できる
アクティビティ
Androidにおける
アクティビティは
Androidアプリの画面に
相当するもの
ボタンやウェブページ
など表示されている
すべてのもののこと。
|