【Android開発】Activityを起動し、情報を伝達する

2526 ワード

【便宜上、以下で起動されるActivityをtoActivityと呼び、Activityを起動するActivityをfroomActivityと呼びます。(少し早口があります。)】Activityを起動することは、この方法によって実現されます。
public void startActivity(Intent intent)
どのactivityからどのactivityを起動するかを指定するのはこのintentのことです。一般的にtoActivityに伝えられるintentの構造関数長はこうです。
Intent(Context packageContext, Class> cls)
簡単に言えば、contextと目標クラスです。一般的にこのpackage ContectはgetActivity()を使って取得します。clsは .classによって得られる。だから、一番簡単な起動方式はこうです。
startActivity(new Intent(getActivity(), toActivity.class));
しかし、常にいくつかの情報をtoActivityに伝える必要があります。この時はintentに追加情報を入れます。これらのextra情報はキーペアとして記憶されています。つまりキーは1つの値に対応しています。キーはStringタイプで、値は何でもいいです。extra情報をintentに入れる時、統一した方法を使います。
intent.putExtra(KEY, value);
取り出し時に異なるタイプの方法がありますので、From Activityの中にintentに追加情報を入れると、入れる時にKEYが必要ですので、取り出す時にKEYが必要です。これはfroomActivityの中にtoActivityの内部容(たとえばKEY)を組み込むという意味です。これは明らかに不適切です。だから、intentを生成するタスクをtoActivityに渡すのが一般的です。toActivityに下記のコードを入れます。
private static final String KEY="com.companyname.appname.keyname";

public static Intent newIntent(Context packageContext, Value value)//           
{
    Intent intent = new Intent(packageContext, toActivity.class);
    intent.putExtra(KEY, value);
    return intent;
}
この静的方法をfroomActivityの中で直接に呼び出してintentを取得することができます。
toActivityはintentを得た後、中の追加情報を持ち出しなければならないです。じゃ、何を入れますか?取り出す時の方法は入れるのが値の種類です。クラスの場合:
//   intent (  )  (Bundle  )     
//            
//              
Value value = (Value) getIntent().getSerializableExtra(KEY);
ポイント:getIntExtra(...)であれば、int配列:getIntArrayExtra(...)がこのフォーマットに適合しているものとして、byte、shott、long、float、double、bootlean、char、Stringがあります。ここでは詳しく説明しません。