今回はActivity間で必要となってくる基本的な記述について集めました。
#Activityを起動したい
Intent intent = new Intent(this, NextActivity.class);//第2引数に移動したいActivity
startActivity(intent);
startActivity()メソッドにintentを渡してIntentのコンストラクタに渡したActivityを起動する。
Intent intent = new Intent(this, NextActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);引数に起動方法を指定
startActivity(intent);
setFlags()メソッドを使えば起動時にどのような振る舞いを行うか指定できます。
Intent.FLAG_ACTIVITY_NO_HISTORYの場合、履歴にスタックせずに次のアクティビティを起動できる。
#他のActivityを起動するときに値を渡したい
現在のActivity
String value = "value";
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("KEY", value);//第一引数key、第二引数渡したい値
startActivity(intent);
受け取り側のActivity
Intent intent = getIntent();
String value = intent.getStringExtra("KEY");//設定したkeyで取り出す
putExtraメソッドはプリミティブ型およびString型なら渡すことが可能。
また、SerializeしたクラスおよびParcerableしたクラスも可能。
渡すときはputExtra()のメソッドのみだが取り出す際は
int型ならgetIntExtra("");
String型ならgetStringExtra("");
のように型に対応したメソッドを呼び出す。
#どのActivityからも自由に値を参照したい
Applicationクラスを使います。
Applicationクラスを使うとアプリケーション内でデータの共有が可能。
このクラスはアプリ起動と同時に作成され動作する。
イメージとしてはどこからでも参照できる最上位のメモリ領域を確保している感じ。
Applicationを継承したクラスを作成する。
public class MyApplication extends Application{
private String value = "";
@Override
public void onCreate() {
//アプリケーションクラス作成時
}
public String getValue(){
return this.value;
}
public void setValue(String value){
this.value = value
}
}
applicationの属性に作成したクラス名を記述。
//applicationの属性にandroid:name="アプリケーションのクラス名"を記述
<application android:name="com.example.MyApplication"
android:icon="@drawable/icon" android:label="@string/app_name">
使うときは
MyApplication mApp = (MyApplication) this.getApplication();
mApp.setValue("value");//valueをセット
MyApplication mApp = (MyApplication) this.getApplication();
mApp.getValue();//valueを取得
次回も基本的な記述について集めたいと思います。