複数のactivity間のデータ共有

2767 ワード

Activity間のデータ共有問題は最初からそれほど葛藤していなかった.なぜなら、2つのActivity間では、複数のActivity間でも静的クラスでデータの共有が可能であるためである.今日Leo 8573は静的クラスの使用を避ける方法を紹介しただけで、この方法も詳細を求めず、ただ記録して、焦眉の急を解くだけです.
まず、プロジェクトに新しいクラスを作成し、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つのアプリケーションオブジェクトしか存在しないため、その特徴を利用してデータの共有を行うことができます.