複数のactivity間のデータ共有
2767 ワード
Activity間のデータ共有問題は最初からそれほど葛藤していなかった.なぜなら、2つのActivity間では、複数のActivity間でも静的クラスでデータの共有が可能であるためである.今日Leo 8573は静的クラスの使用を避ける方法を紹介しただけで、この方法も詳細を求めず、ただ記録して、焦眉の急を解くだけです.
まず、プロジェクトに新しいクラスを作成し、Applcationを継承します.このクラスは私たちのデータクラスで、普段私たちが使っているModleクラスと理解することができます.言い換えれば、このクラスはいくつかのデータフィールドを保存し、GetとSetメソッドを書くことができます.
たとえば、次のコードでは、GetメソッドとSetメソッドを使用して、DataAppというクラスを作成し、Applcationを継承し、DataAppクラスに共有したいデータフィールドを書き込みます.
コードの例:
次に、プロジェクトのAndroidManifest.xmlファイルの<アプリケーション>タブにandroid:name=「.DataApp」プロパティを追加します.
コードの例:
最後に、使用したいActivityでgetApplication()メソッドを呼び出すと、DataAppのオブジェクトが得られ、保存するフィールド値がSetメソッドでDataAppに格納され、他のActivityでもgetApplication()メソッドでDataAppのオブジェクトが得られ、Getメソッドで他のActivityに格納されたばかりのデータフィールドが得られ、共有の目的が達成されます.
コードの例:
ただし、使用済みのデータフィールドは、フィールドをnullに設定して回収することを忘れないでください.そうしないと、データは常にDataAppに存在します.
コードの例:
以上,このようにAplicationを用いてActivity間のデータ共有と伝送を行う方法である.なぜこのようにするのかについては、Leo 8573は、アプリケーションのライフサイクルに関係していることを理解しており、1つのアプリケーションが実行中に1つのアプリケーションオブジェクトしか存在しないため、その特徴を利用してデータの共有を行うことができます.
まず、プロジェクトに新しいクラスを作成し、Applcationを継承します.このクラスは私たちのデータクラスで、普段私たちが使っているModleクラスと理解することができます.言い換えれば、このクラスはいくつかのデータフィールドを保存し、GetとSetメソッドを書くことができます.
たとえば、次のコードでは、GetメソッドとSetメソッドを使用して、DataAppというクラスを作成し、Applcationを継承し、DataAppクラスに共有したいデータフィールドを書き込みます.
コードの例:
public class DataApp <span style="background-color: rgb(255, 255, 51);">extends Application</span> {
private String userName;
private String passWord;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
次に、プロジェクトのAndroidManifest.xmlファイルの<アプリケーション>タブにandroid:name=「.DataApp」プロパティを追加します.
コードの例:
<application
<span style="color:#ff0000;">android:name =".DataApp"</span>
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.leo8573.test.LoginActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
最後に、使用したいActivityでgetApplication()メソッドを呼び出すと、DataAppのオブジェクトが得られ、保存するフィールド値がSetメソッドでDataAppに格納され、他のActivityでもgetApplication()メソッドでDataAppのオブジェクトが得られ、Getメソッドで他のActivityに格納されたばかりのデータフィールドが得られ、共有の目的が達成されます.
コードの例:
// Activity
DataApp dataApp = (DataApp) getApplication();
dataApp.setUserName("Leo8573");
// Activity
DataApp dataApp = (DataApp) getApplication();
String userName = dataApp.getUserName();
ただし、使用済みのデータフィールドは、フィールドをnullに設定して回収することを忘れないでください.そうしないと、データは常にDataAppに存在します.
コードの例:
// Activity ,
DataApp dataApp = (DataApp) getApplication();
dataApp.setUserName(null);
以上,このようにAplicationを用いてActivity間のデータ共有と伝送を行う方法である.なぜこのようにするのかについては、Leo 8573は、アプリケーションのライフサイクルに関係していることを理解しており、1つのアプリケーションが実行中に1つのアプリケーションオブジェクトしか存在しないため、その特徴を利用してデータの共有を行うことができます.